2013-04-25 66 views

回答

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])); 
} 
+0

我不需要担心性能,所以它非常适合我的需求。顺便说一下,我在Javascript中使用了这个算法。 – 2015-01-02 00:03:28