加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

判断一点是否在三角形内部

(2022-05-28 14:53:57)
标签:

三角形

pip问题

分类: 无人驾驶
GJK算法中,需要判断三角形(单纯形)是否包含原点,来决定是否退出迭代循环。

同时,判断一点是否在三角形内部的问题也是一些互联网公司对算法工程师面试中的一道算法题。

如下图所示,已知点 A、B、C 三点 和 点P 的坐标,判断点P是否在由A、B、C 三点 组成的三角形内。
判断一点是否在三角形内部


方法一:三角形面积法

如下图所示,当点P在三角形内部时,三角形面积:
PAB+PBC+PCA = ABC
判断一点是否在三角形内部


当点P在三角形外部时,则三角形面积:
PAB+PBC+PCA > ABC
判断一点是否在三角形内部


已知三角形三点坐标,可先求得三条边 a、b、c 的长度,再根据海伦公式,即可求得三角形面积。
判断一点是否在三角形内部


方法二:向量法

再回顾一下向量叉乘的定义:
判断一点是否在三角形内部

向量的叉乘可以用来判断点P是在向量AB的左侧还是右侧。

通过观察,可以发现:
  • 若点P在三角形内部时,沿逆时针方向,则点P一直在向量AB、BC、CA的左侧;
  • 若点P在三角形外部时,则点P必然在AB、BC、CA某一向量的右侧。
判断一点是否在三角形内部


若是三角形三点是顺时针方向,则若点P在三角形内部时,点P一直在向量AB、BC、CA的右侧。

对于点P在三角形的某一边上或与某一顶点重合的特殊情况,上述两种方法同样适用,需要注意一下临界条件的设置。

对于三角形,可以采用上面两种方法,对于任意多边形,则可根据射线法来判断某点是否在多边形的内部,该问题也称为 PIP(Point in Polygon)问题。

判断一点是否在三角形内部



0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有