'Get the angle around the Z axis difference between a pair of Vector3s.'
分析:
本段函数中,使用atan2函数计算出"subtractVec3在xoy平面上的投影"到"subtractFromVec3在xoy平面上的投影"的夹角。
(2)defgetAngleDifferenceByComplex(subtractFromComplex,subtractComplex):
'Get the angle between a pair of normalized complexes.'
subtractComplexMirror=complex(subtractComplex.real,-subtractComplex.imag)
differenceComplex = subtractComplexMirror * subtractFromComplex
returnmath.atan2(differenceComplex.imag,differenceComplex.real)
'Get the angle between a pair of normalized complexes.'
分析:
本段函数中,先使用complex函数将两个向量转化为复数形式,再使用atan2函数得出两个复数的夹角。
2.2源代码分析
2.2.1面积算法分析
在Python源代码中,利用向量叉积来求三角形面积,任意两边向量的叉积的绝对值的1/2即为三角形的面积。
叉积(即交叉乘积)也被称为向量积、外积,是一种在向量空间中向量的二元运算。设向量P=(x,y),Q=(a,b),而PQ的叉积仍然是一个向量,其长度可以表示为:
|PQ|=xb-ay
设三角形ABC,顶点坐标分别为(A.x,A.y),(B.x,B.y),(C.x,C.y)
并对算出后的面积使用abs()函数取绝对值,再利用For循环将所有三角形面积相加得出最后的多边形面积。
2.2.2夹角算法分析
在Python源代码中,将两个三文向量(x,y,z)投影在XOY平面上得到相对应的二文向量(x,y,0),利用complex函数将二文向量转化为复数形式。再利用atan2函数求得夹角。
Atan2函数:
返回给定的X及Y坐标值的反正切值。反正切的角度值等于X轴正方向与通过原点和给定坐标点(Y坐标,X坐标)的射线之间的夹角。结果以弧度表示并介于-pi到pi之间(不包括-pi)。
3 C语言算法设计与说明
本节利用前述Python算法原理,通过C语言来实现向量叉积求解多边形面积,反正切函数求解向量的夹角以及新添加的三个功能的设计。
3.1面积算法
3.1.1 叉积求解
下面是两种将求解多边形面积问题转化为多个求三角形面积的方法:
(1)将多边形内的一点与多边形各个顶点连接起来,将多边形划分为多个三角形,如图3.1所示。分别求出每个三角形的面积,累加起来即为多边形的面积。 计算几何在3D打印机中的应用(3):http://www.youerw.com/shuxue/lunwen_11565.html