Androidプラットフォームで純粋な Java を使用して、 2D ポイントが三角形の内側にあるかどうかを判断したいと考えています。Android で三角形を描画するために使用される 2D ポイントと同じ表現 ( Canvas.drawVertices() )を使用するための特別なボーナスを予約します。
交差テスト自体の答えはすでに見つけていますが、Android に希望どおりに適合していません。
ありがとう!
Androidプラットフォームで純粋な Java を使用して、 2D ポイントが三角形の内側にあるかどうかを判断したいと考えています。Android で三角形を描画するために使用される 2D ポイントと同じ表現 ( Canvas.drawVertices() )を使用するための特別なボーナスを予約します。
交差テスト自体の答えはすでに見つけていますが、Android に希望どおりに適合していません。
ありがとう!
私は(非常に)せっかちになり、質問にリンクされている回答に基づいて、これを自分で実装しました。テストには2つの方法があります。TODO: 一時割り当てを減らします。
import android.graphics.PointF;
//...
private float sign(PointF p1, PointF p2, PointF p3) {
return (p1.x - p3.x) * (p2.y - p3.y) - (p2.x - p3.x) * (p1.y - p3.y);
}
private boolean pointInTriangle(PointF pt, PointF v1, PointF v2, PointF v3) {
boolean b1, b2, b3;
b1 = sign(pt, v1, v2) < 0.0f;
b2 = sign(pt, v2, v3) < 0.0f;
b3 = sign(pt, v3, v1) < 0.0f;
return ((b1 == b2) && (b2 == b3));
}
private boolean pointInTriangle(float x, float y, float[] v) {
return pointInTriangle(new PointF(x, y), new PointF(v[0], v[1]), new PointF(v[2], v[3]), new PointF(v[4], v[5]));
}