在Android上实现2D点三角测试

时间:2013-04-25 18:28:14

标签: android geometry 2d point intersection

我想在 Android 平台上使用纯java确定 2D点 三角 三角 。我为使用Android中用于绘制三角形(Canvas.drawVertices())的2D点的相同表示保留了特殊奖励。

我已经为交叉点测试找到了answers,但它们并没有像我想的那样适应Android。

谢谢!

1 个答案:

答案 0 :(得分:3)

我变得非常不耐烦并且自己实施了这个,根据问题中的答案我现在有两种测试方法。 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]));
}