计算几何在3D打印机中的应用(2)
时间:2018-03-22 20:47 来源:毕业论文 作者:毕业论文 点击:次
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 ) (责任编辑:qin) |