0
實現我想,以確定是否2D點是內一個三角形使用的Android平臺上的純java。我爲在Android中繪製三角形所用的2D點使用相同的表示法保留了特別獎勵(Canvas.drawVertices())。2D點在三角形測試Android上
我已經發現answers用於相交測試本身,但它們並不適用於我想要的Android。
謝謝!
實現我想,以確定是否2D點是內一個三角形使用的Android平臺上的純java。我爲在Android中繪製三角形所用的2D點使用相同的表示法保留了特別獎勵(Canvas.drawVertices())。2D點在三角形測試Android上
我已經發現answers用於相交測試本身,但它們並不適用於我想要的Android。
謝謝!
我越來越(非常)不耐煩,自己實現了這一點,根據問題中的相關答案,我現在有兩種測試方法。 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]));
}
我不需要擔心性能,所以它非常適合我的需求。順便說一下,我在Javascript中使用了這個算法。 – 2015-01-02 00:03:28