如何确定点是否在二维三角形中?

如何确定点是否在二维三角形中?

是否有一个简单的方法来确定一个点是否在一个三角形内?它是二维的,不是3D的。



白板的微信
浏览 676回答 3
3回答

一只斗牛犬

解下列方程组:p&nbsp;=&nbsp;p0&nbsp;+&nbsp;(p1&nbsp;-&nbsp;p0)&nbsp;*&nbsp;s&nbsp;+&nbsp;(p2&nbsp;-&nbsp;p0)&nbsp;*&nbsp;t重点p在三角形内,如果0 <= s <= 1和0 <= t <= 1和s + t <= 1.s,t和1 - s - t被称为重心坐标重点p.

慕尼黑的夜晚无繁华

我同意安德烈亚斯·布林克,以重心为中心的坐标对此任务非常方便。请注意,不需要每次求解方程系统:只需计算解析解即可。使用安德烈亚斯“表示法,解决办法是:s&nbsp;=&nbsp;1/(2*Area)*(p0y*p2x&nbsp;-&nbsp;p0x*p2y&nbsp;+&nbsp;(p2y&nbsp;-&nbsp;p0y)*px&nbsp;+&nbsp;(p0x&nbsp;-&nbsp;p2x)*py); t&nbsp;=&nbsp;1/(2*Area)*(p0x*p1y&nbsp;-&nbsp;p0y*p1x&nbsp;+&nbsp;(p0y&nbsp;-&nbsp;p1y)*px&nbsp;+&nbsp;(p1x&nbsp;-&nbsp;p0x)*py);哪里Area是三角形的(签名)区域:Area&nbsp;=&nbsp;0.5&nbsp;*(-p1y*p2x&nbsp;+&nbsp;p0y*(-p1x&nbsp;+&nbsp;p2x)&nbsp;+&nbsp;p0x*(p1y&nbsp;-&nbsp;p2y)&nbsp;+&nbsp;p1x*p2y);只是评估一下s,&nbsp;t和1-s-t..重点p是三角形的当且仅当它们都是正的。编辑:请注意,该区域的上述表达式假定三角形节点编号是逆时针方向的。如果编号是顺时针方向的,则此表达式将返回一个负区域(但大小正确)。测试本身(s>0 && t>0 && 1-s-t>0)并不取决于编号的方向,因为上面的表达式乘以1/(2*Area)如果三角形节点方向发生变化,也要更改符号。编辑2:要获得更高的计算效率,请参见COPROC下面的注释(它指出,如果预先知道三角形节点(顺时针或逆时针)的方向,则按2*Area在表达式中s和t可以避免)。另见阿祖尔注释中的jspldle-代码安德烈亚斯·布林克答案。
打开App,查看更多内容
随时随地看视频慕课网APP