私は、2行のx座標とy座標(したがって8座標)を受け取るisInPolyというメソッドを作成し、2行が交差する場所を決定しました。私は、intersectLocationや何かのようなメソッドを呼び出す必要があったはずですが、なぜそれを作成したのかは、ポイントがポリゴンであるかどうかを確認することでした。ポリゴンにない点を知っていて、その点とそれがポリゴンの内側にあるかどうかを調べるためにテストしたい点との間に線を引いたら、そこにいくつの交点があるかを数えます。交点の数が偶数の場合、点はポリゴンにはなく、数が奇数の場合、点はポリゴン内にあります。とにかく、私はこの方法のための正しい出力を得ていません。私のプログラムでは、テストポイントが既知のポイントに対して-1の傾きにある場合、そのポイントがポリゴンの内側にあることがわかります。私が書いたことが、私の方法に問題があるかどうかを見ることができますか?ポリゴンテストでは、ヒットテストはポリゴン内のポイントですか?メソッド
public static boolean isInPoly(float l1x1, float l1y1, float l1x2, float l1y2, float l2x1, float l2y1, float l2x2, float l2y2) {
// TODO Auto-generated method stub
// l1x1 = the first lines first x coordinate
// l1y1 = the first lines first x coordinate
//.....
//l1m = the first lines slope represented as "m" in the equation y=mx+b
//l1b = the first lines y intercept represented as "b" in the equation y=mx+b
// x = the x coordinate of the intersection on the 2 lines
// y = the x coordinate of the intersection on the 2 lines
float l1m,l2m,l1b,l2b,x,y;
//y=mx+b
//x=(y2-y1)/(x2-x1)
//b=y/(mx)
//slopes of each line
l1m = (l1y2-l1y1)/(l1x2-l1x1);
l2m = (l2y2-l2y1)/(l2x2-l2x1);
//y-intercepts of each line
l1b = l1y2/(l1m*l1x2);
l2b = l2y2/(l2m*l2x2);
//m1x+b1=m2x+b2
//m1x=m2x+b2-b1
//x=(m2/m1)x+((b2-b1)/m1)
//x-(m2/m1)x=((b2-b1)/m1)
//(1-(m2/m1))x=((b2-b1)/m1)
//x=((b2-b1)/m1)/(1-(m2/m1))
//finding the x coordinate of the intersection
x=((l2b-l1b)/l1m)/(1-(l2m/l1m));
//y=mx+b
//finding the x coordinate of the intersection
y=(l1m*x)+l1b;
if(y>=l1y1 && y<=l1y2 && x>=l1x1 && x<=l1x2){
return true;
}
else{
return false;
}
}