接上文:碰撞檢測算法之GJK算法
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在三角形的某一邊上或與某一頂點重合的特殊情況,上述兩種方法同樣适用,需要注意一下臨界條件的設置。
對于三角形,可以采用上面兩種方法,對于任意多邊形,則可根據射線法來判斷某點是否在多邊形的内部,該問題也稱為 PIP(Point in Polygon)問題。
詳見:判斷一點是否在多邊形内部:射線法
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!