判斷點是否在一個矩形內


判斷是否在矩形內:

只需要判斷該點是否在上下兩條邊和左右兩條邊之間就行。

判斷一個點是否在兩條線段之間夾着就轉化成,判斷一個點是否在某條線段的一邊上,就可以利用叉乘的方向性,來判斷夾角是否超過了180度 如下圖

只要判斷(AB X AE ) * (CDX CE)  >= 0 就說明E在AB,CD中間夾着,同理計算另兩邊DA和BC就可以了。

最后就是只需要判斷

(AB X AE ) * (CD X CE)  >= 0 && (DA X DE ) * (BC X BE) >= 0 。

參考代碼:

1     // 計算 |p1 p2| X |p1 p|
2     function GetCross(p1: Point, p2: Point, p: Point) {
3         return (p2.x - p1.x) * (p.y - p1.y) - (p.x - p1.x) * (p2.y - p1.y);
4     }
5     //判斷點p是否在p1p2p3p4的正方形內
6     function IsPointInMatrix(p1: Point, p2: Point, p3: Point, p4: Point, p: Point) {
7         let isPointIn = GetCross(p1, p2, p) * GetCross(p3, p4, p) >= 0 && GetCross(p2, p3, p) * GetCross(p4, p1, p) >= 0;
8         return isPointIn;
9     }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM