我是靠谱客的博主 笨笨舞蹈,最近开发中收集的这篇文章主要介绍平面图形原理总结(3):多边形相交,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

前言

继续总结关于图形学的问题,这次总结下多边行的相交问题,同样可以自行阅读参考文献了解,以下是本人的自行总结内容。

参考文献:《计算机图形学——用OpenGL实现(第2版)》 清华大学出版社

平面直线与多边形相交

首先要说明一个定义——外法向量,指的是多边形的边指向多边形外部的法向量。要想确立多边形每条边的外法向量,简单的方法就是顺时针记录多边形的顶点集合 P i P_i Pi,对应边的集合 E i = P i + 1 − P i E_i = P_{i+1} - P_i Ei=Pi+1Pi,边的外法向量集合 E i ⊥ E^perp_i Ei便是 E i E_i Ei的逆时针法向量
具体步骤便是,依次对多边形的每一条边做直线与线段的相交检测(具体请参考前面的章节平面图形原理总结(1):直线相交)

平面线段与多边形相交

步骤大致与直线与多边形相交的方法相似,可用两直线相交的方法,但是要记录下所有线段所在直线与多边形边所在直线的相交点的t值,同时要区分入点与出点。出入点区分方法是用线段的向量 n ⃗ vec n n 与多边形边的外法向量 E i ⊥ E^perp_i Ei做点乘:
n ⃗ ⋅ E i ⊥ &lt; 0 vec n cdot E^perp_i &lt; 0 n Ei<0,则为入点;
n ⃗ ⋅ E i ⊥ &gt; 0 vec n cdot E^perp_i &gt; 0 n Ei>0,则为出点;
n ⃗ ⋅ E i ⊥ = 0 vec n cdot E^perp_i = 0 n Ei=0,则线段与多边行的边平行(考虑重合问题);
取入点所有记录t与0的最大值,出点所有记录t与1的最小值;
若存在 0 ≤ t ≤ 1 0 le t le 1 0t1,则线段与多边形相交。

平面多边形与多边形相交

以上述线段与多边形相交为单元步骤,对多边形的每一条边做与另一多边形的相交判断,即可得到多边形与多边形的相交检测。

平面圆与多边形相交

具体步骤便是,依次对多边形的每一条边做圆与线段的相交检测(具体请参考前面的章节平面图形原理总结(2):点与直线)

补充:凸多边形的投影法相交检测

具体步骤为:检测图形对多边形每条边的法向量形成的坐标系做投影,若其中一边的检测中,存在图形的投影与多边形自身的投影范围没有重合部分,则图形与多边形不相交;反之,则相交。
注意:投影法只适用于凸多边形,凹多边形不适用。
【投影法没有参考书籍中记载,具体描述,可自行上网查找】

最后

以上就是笨笨舞蹈为你收集整理的平面图形原理总结(3):多边形相交的全部内容,希望文章能够帮你解决平面图形原理总结(3):多边形相交所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(48)

评论列表共有 0 条评论

立即
投稿
返回
顶部