三维空间中的圆与三角形(一):圆与内接三角形
来源:互联网 发布:新域名紧急升级访问 编辑:程序博客网 时间:2024/04/30 08:36
注:我在这里撰写的对空间解析几何性质的分析都将是能直接应用到软件开发中,所以对这些性质的分析后都会列出最终的公式出来。
已知圆弧上起点、中间任意一点、终点,求这段圆弧
要求出这段圆弧并最终能在屏幕上光滑地显示出来,我采用求解圆弧的参数方程的形式(事实上,在绝大部分的几何造型平台中,为了显示及运算需要,一般都会采用参数方程的形式来表示曲线和曲面)。
圆的参数方程(字母所代表含义可参见【第六回】OCCT之Package Geom的曲线曲面参数方程解析):
P(U) = O + R*Cos(U)*XDir + R*Sin(U)*YDir现在开始求解。
设圆弧上这三点分别为A,B,C,现在要求出这段圆弧的圆心O,半径R,弧度范围[Umin, Umax],单位横轴XDir和单位纵轴YDir。如下图所示圆弧:
其中点D,E分别为线段AB,BC的中点,根据三角线外心的性质(三角形外心为各边中垂线的交点),EO⊥BC, DO⊥AB。那么现在可列出两个应用性质(粗体表示向量):
EO = ED+DO,
EO·BC = 0.
则通过这两个应用性质可以求出圆心O,设直线DO的向量方程为:
P(λ) = D + λvDir
则可设DO=λvDir,代入上式:
(ED+λvDir)·BC = 0.
λ=-(ED·BC)/(vDir·BC).
现在只要知道直线DO的方向单位向量vDir,就可求出λ,进而求出圆心O。
vDir的求法可使用三维直角坐标系的性质,得到弧面的单位法矢:vNormal = normalize(AB×BC),然后可求得vDir = normalize(vNormal×AB)。
其中一线段的中点可通过该线段两端点坐标求和再除以2得到。
求出了圆心O,半径即为圆心O到点A,B,C中任意一点的距离。
可求单位横轴XDir=normalize(OA),单位纵轴YDir=normalize(vNormal×XDir)。则可得弧度范围中Umin=0。
现在需要求出弧度范围中的Umax,分两种情况,如下图所示:
圆弧分两种:优弧和劣弧。优弧上的弓形角(几何原本中的定义:在一段圆弧上取一点,连接这点和这段圆弧的底的两个端点的二直线所夹的角叫做这段圆弧的弓形角。)是锐角,如右图所示;劣弧上的弓形角是钝角,如左图所示。
判断圆弧ABC是优弧还是劣弧,就通过判断圆弧上的弓形角是锐角还是钝角,弓形角α,β = arccos(normalize(BC)·normalize(BA))。
优弧上圆心角即Umax的计算式:ω = 2π-arccos(normalize(OA)·normalize(OC)),
劣弧上圆心角即Umax的计算式:ψ = arccos(normalize(OA)·normalize(OC))。
至此,圆弧的参数方程中所有的参数均已求出。
- 三维空间中的圆与三角形(一):圆与内接三角形
- 三维空间中的圆与三角形(二):圆与外切三角形
- 三维空间中的三角形旋转
- 三维空间中线与三角形相交判定
- 圆与三角形(圆与三角形是否相交)
- ##圆与三角形交##
- GitHub上三维空间中射线与三角形相交检测代码(Ray-Triangle)
- 圆内三角形统计
- 1298 圆与三角形(计算几何)
- 圆与三角形碰撞检测
- 51nod 圆与三角形
- 51Nod1298 圆与三角形
- 51nod1298 圆与三角形
- 三维空间中的圆与二维多段线
- 判断三维空间中的一个点是否在三角形内,边上的一种算法
- hdu 1700(圆最大内接三角形)
- 圆与三角形的几何+二分
- 51nod 1298 圆与三角形
- ISBANK内部实现
- 第八周项目1计算函数的值
- 生活碎片
- 面向对象程序设计上机练习十(运算符重载)
- 8051-stc冷启动自动下载线原理及DIY
- 三维空间中的圆与三角形(一):圆与内接三角形
- 使用Mockup Plus的九大理由
- 修改oracle数据库归档模式和归档路径
- node.js中的异步目录遍历中需要注意的问题
- “iOS 推送通知”详解:从创建到设置到运行
- 【unity 代码升华篇】委托进阶、回调函数(三)
- 搭建Java的Socket服务器
- 第8周项目1分段函数求值
- 类似Popuwindow的实现