前言
继续总结关于图形学的问题,这次总结下多边行的裁剪问题,同样可以自行阅读参考文献了解,以下是本人的自行总结内容。
参考文献:《计算机图形学——用OpenGL实现(第2版)》 清华大学出版社
平面直线与多边形的裁剪
裁剪的前提是必须相交,否则裁剪结果为空。所以我们可以选算出直线与多边形的相交点的t值并按大小顺序记录下来并记录是出点还是入点,与多边形的顶点一起做个队列,根据直线的法向量与要裁剪的部分,对多边形的点按顺时针顺序查找,当找到入点后,根据t的顺序找下一个出点(跳过中间的多边形顶点),然后继续查找直至找到已找过的点,如此对所有要裁剪部分的顶点都查找完为止。
平面多边形与多边形的裁剪
同样多边形与多边形裁剪的前提是两多边形必须相交,否则裁剪结果为空。裁剪步骤与上述相仿,首先要做出两个多边形顶点以及相交点的顺时针顺序队列(必须顶点起头)。然后遍历被裁剪多边形的队列,查找的第一个交点开始;重复以下操作:找到下一个交点,并交换到另一队列对应交点,继续往下查找;直至找到有重复查找过的交点为止,记录过程中的所有点为结果;然后继续找寻下一个未被检测的被裁剪队列顶点,继续上述查找记录,直至遍历完整个被裁剪队列为止,被记录的点的集合即为裁剪结果。
平面多边形间的集合操作
假定两多边形A,B