2013-04-25 45 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