射線法。該法中常用水平掃瞄線法或垂直線法來判斷一點是否在區域內。假若有一疑問點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 第一步 判斷這個點是不是就是多邊形的端點 第二步 判斷這個點是不是落在多邊形的邊界上 第三步 通過這個點橫向作一平行射線,判斷與多邊形的交點數,如果交點是頂點,則交點數加一,結果如果是奇數,則該點落在多邊形之內,如果是偶數,則反之。具體演算法涉及向量叉積,...