判断点在线段的左边还是右边 判断线段是否相交
在recast中遇到的一個操作,判斷點是在線段的左邊還是右邊
判斷在左邊和右邊在很多場景都有用到,是計算機幾何中比較基礎的概念。比如判斷是凹多邊形還是凸多邊形;判斷點是凹點還是凸點;判斷線段是否相交;判斷兩點是否在線段兩側等等。
如https://blog.csdn.net/qiushangren/article/details/90446381
這篇博客所說,順時針方向 三點組成的向量的叉積z值為負,逆時針方向三點組成的向量的叉積z值為正。這個可以反過來用于求點在線段的左右。
首先左右不能用客觀的視角來定,應該從向量的角度去判斷。所以先將線段轉換成向量,需要注意的是向量是有方向的有起止的。
如上,在xy平面上有線段AB(注意A為起點,B為終點)組成向量AB,存在點C1和C2,組成三角形ABC2和三角形ABC1。很明顯ABC2組成一個順時針方向的三個點,ABC1 組成了逆時針方向的三個點(注意這里的三角形必須包含了 向量AB)。
根據上面鏈接的博客可以很輕松的看出,
ABxAC2>0 而 ABxAC1<0 (叉乘,不是點乘),(注意都是以A為起點,也就是以已知向量的起點為起點)。
如果線段AB組成向量為BA,則
BAxBC2<0 而 BAxBC1 >0(注意這里都是以B為起點,以已知向量的起點為起點)。
總結:如果以AB的方向來判定,那么C1就是在AB的右邊,C2就是在AB的左邊,假設三角形頂點順序為ABC ,可以看到如果用ABC1組裝三角形,那么就是順時針的,如果ABC2組裝三角形,那就是逆時針的;如果以BA來判定,那C2在BA右邊,C1在BA的左邊,假設三角形頂點順序為BAC,BAC1為逆時針,BAC2位順時針。可以推斷如果在左邊,那么順序就是逆時針;如果在右邊,那么順序就是順時針。反過來也一樣,順時針表示在右邊,逆時針表示在左邊。ABxAC(注意A為起始點),使用右手定則,順時針為求出的結果(z)為負數,逆時針為求出的結果(z)正數。
判斷點是凹點還是凸點:取目標點和目標點相鄰的兩個點,按逆時針方向,將目標點與前面的點相連成線段,判斷目標點后面的點是否在線段的左邊還是右邊,如果在左邊,則說明是凸點,否則是凹點。
判斷是凹多邊形還是凸多邊形:按逆時針方向判斷所有 邊的下一個點(逆時針方向與邊相鄰的點) 是否都在邊的左邊,如果都在左邊說面是凸多邊形。也可以按順時針方向來,判斷是否在右邊。
判斷兩點是否在線段兩側:直接判斷一個點在左邊一個點在右邊。
判斷線段是否相交:假設兩條線段a,b。先計算兩線段的bound是否相交做個快速排除,再判斷線段a的兩個頂點是否都在線段b的兩側,再判斷線段b的兩個頂點是否在線段a的兩側,如果兩個條件都滿足,則a b相交,否則不相交。(求交點)
?
?
總結
以上是生活随笔為你收集整理的判断点在线段的左边还是右边 判断线段是否相交的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 向腾讯企业邮箱发送邮件失败,报错: 55
- 下一篇: MPQ8873电源芯片配置