判斷任意一點是否在多邊形範圍內

2021-10-16 04:51:37 字數 1024 閱讀 3540

射線法。該法中常用水平掃瞄線法或垂直線法來判斷一點是否在區域內。假若有一疑問點p(x,y),要判斯它是否在多邊形內,可從該疑問點向左引水平掃瞄線(即射線)。

計算此線段與區域邊界的相交次數c。如果c為奇數,認為疑問點在多邊形內;為偶數,則疑問點在多邊形外。

/**

*射線法判斷

* @param pointx 要判斷的點的橫座標

* @param pointy 要判斷的點的縱座標

* @param x 指定區域的橫座標組成的陣列

* @param y 指定區域的縱座標組成的陣列

* @return

*/private static boolean isinarea(double pointx, double pointy, double x,

double y)

}return result;

}

更簡潔的方法利用generalpath類裡的lineto方法繪製任意多邊形,再用contains方法判斷目標點位是否在該圖形內。

/**

* 乙個點是否在多邊形內

** @param point 要判斷的點的座標

* @param polygon 組成的範圍點座標集合

* @return

*/private static boolean check(point2d.double point, listpolygon)

// 將幾何多邊形封閉

generalpath .lineto(first.x, first.y);

generalpath .closepath();

// 測試指定的 point2d 是否在 shape 的邊界內。

return peneralpath.contains(point);

}

注:該方法輸入的範圍點座標一定按照順/逆時針順序,有序排列,繪製的圖形才會是想要的結果,該方法結果才是準確的。否則程式計算出的圖形與目標圖形不同,結果失真。

判斷乙個點是否在多邊形內

演算法 如果是凸多邊形,我覺得這樣很方便 1 在多邊形內任取一點a 比如是某對角線的中點,如果是三角形則取某中線的中點 2 判斷未知點 設為b 與a是否在任何一條邊的同側。方法簡單有效 設任一邊的直線方程為 y ax b 令f x ax b y 只需判斷f a f b 0 a,b同側 0 在邊上 0...

判斷點是否在多邊形內

1.叉乘判別法 只適用於凸多邊形 想象乙個凸多邊形,其每乙個邊都將整個2d螢幕劃分成為左右兩邊,連線每一邊的第乙個端點和要測試的點得到乙個向量v,將兩個2維向量擴充套件成3維的,然後將該邊與v叉乘,判斷結果3維向量中z分量的符號是否發生變化,進而推導出點是否處於凸多邊形內外。這裡要注意的是,多邊形頂...

判斷點是否在多邊形內

判斷點是否在多邊形內有三個步驟 自csdn 第一步 判斷這個點是不是就是多邊形的端點 第二步 判斷這個點是不是落在多邊形的邊界上 第三步 通過這個點橫向作一平行射線,判斷與多邊形的交點數,如果交點是頂點,則交點數加一,結果如果是奇數,則該點落在多邊形之內,如果是偶數,則反之。具體演算法涉及向量叉積,...