4 算法检验 19
4.1多边形面积 19
4.1.1 叉积求解法 19
4.1.2 公式求解法 20
4.3两线段交点 20
4.4判断多边形是否为凸多边形 21
总结 22
致谢 23
参考文献 24
1 绪论
1.1 背景
发明家恩里科•迪尼(Enrico Dini)设计的一种神奇打印机——3D打印机(3D Printers),即快速成形技术的一种机器。这是一种以数学模型文件作为基础,运用粉末状金属或塑料等可粘合材料,通过逐层打印的方式来构造物体的技术。3D打印机不仅可以“打印”出一幢完整的建筑,甚至还可以在航天飞船中给宇航员打印任何所需的物品的形状。其打印过程简单说来,就是把数据和原料放进3D打印机中,机器就会按照程序把产品一层层造出来。最后打印出的产品,可以即时使用。过去其常在模具制造、工业设计等领域被用于制造模型,现正逐渐用于一些产品的直接制造,这意着这项技术正在普及。在本课题中我们主要研究计算几何在3D打印机中的应用。
1.2 论文内容概要
本文安排如下:
第二节 主要对Python源代码中的多边形面积及向量夹角函数的理解和阅读,并对分析其涉及的计算几何知识。
第三节 主要实现使用C语言完成Python源代码中的功能,并详述算法原理及所设计的程序。
第四节 列举数据,代入程序中,得出的结果,与自己计算并结合作图的结果相比较,检验程序是否完成了所需要的功能。
2 Python源代码解读
本节主要结合计算几何知识分析Python源代码。
2.1源代码部分函数解读
2.1.1 计算多边形面积
(1)def getAreaLoop(loop):
areaLoopDouble = 0.0
for pointIndex, point in enumerate(loop):
pointEnd = loop[(pointIndex + 1) % len(loop)]
areaLoopDouble += point.real * pointEnd.imag - pointEnd.real * point.imag
return 0.5 * areaLoopDouble
'Get the area of a complex polygon.'
分析:
本段函数利用向量叉积公式:
A=0.5*sum(xi*y(i+1)-x(i+1)*yi)(i=0-n-1逆时针排列>0))(即源代码中areaLoopDouble += point.real * pointEnd.imag - pointEnd.real * point.imag计算多边形面积,其中point.real,point.imag分别表示为起始向量的横坐标与纵坐标,pointEnd.real,pointEnd.imag分别表示末尾向量的横坐标与纵坐标,通过向量叉积公式计算得出2倍的多边形面积,最后乘以1/2即得多边形面积。
(2)def getAreaLoopAbsolute(loop):
return abs(getAreaLoop(loop))
'Get the absolute area of a complex polygon.'
分析:
本段函数中,使用绝对值函数abs()将计算出来的多边形面积求绝对值。
(3)def getAreaLoops(loops):
areaLoops = 0.0
for loop in loops:
areaLoops += getAreaLoop(loop)
return areaLoops
'Get the area of a list of complex polygons.'
分析:
本段函数中,使用for循环语句,将计算出的多个多边形面积进行求和。
2.1.2计算两个向量的夹角
(1)def getAngleAroundZAxisDifference(subtractFromVec3, subtractVec3):
subtractVectorMirror=complex(subtractVec3.x,-subtractVec3.y)
differenceVector=getRoundZAxisByPlaneAngle(subtractVectorMirror, subtractFromVec3 )
return math.atan2( differenceVector.y, differenceVector.x ) 计算几何在3D打印机中的应用(2):http://www.youerw.com/shuxue/lunwen_11565.html