2011-01-11 11 views
0

頂点が三角形の内側にあるかどうかを確認しようとしていますが、私は3D環境のCCW関数を開発する際に問題があります。点は、三角形の平面上にある場合、2D的環境のCCW関数の三角形内の頂点 - 衝突検出

その

//CCW calculates the cross produt 


double CCW (point A , point B , point C) { 

return (B.x-A.x) * (C.y-A.y) - (B.y-A.y) * (C.x-A.x); 

} 

//The other part is designed to work on 3D 

typedef struct{ 

    double x; 
    double y; 
    double z; 

}Point; 

int inTriangle(point A, point B, point C, point D){ 

    Point E; 

    E.x = (A.x + B.x + C.x)/3; 

    E.y = (A.y + B.y + C.y)/3; 

    E.z = (A.z + B.z + C.z)/3; 


return (CCW(A,B,D) * CCW (A,B,E) > 0 && 
     CCW(B,C,D) * CCW(B,C,E) > 0 && 
     CCW(A,C,D) * CCW(A,C,E)); 

} 
+0

CCWは、クロス積を計算することはできません。それを超えて、クロス積は2つのベクトルに対してのみ定義されます。 –

+0

OKなので、CCWはベクトルABとACの外積のz成分を計算していますか? –

+0

3Dの三角形内の点はどういう意味ですか?三角形の平面にポイントを投影して2Dをチェックすることを意味しますか? –

答えて

0

ようになるには、重心法はhereを説明し使用することができます。

+0

基本的には、3Dモデル間の衝突検出をテストするためにこのコードを適用することです。 – Sotiris

1

頂点が三角形の平面とその境界(つまり三角形の表面)に直接あるかどうかを知りたい場合は、その2つのものを別々に確認できます。まず、頂点が三角形の平面にあるかどうかを確認します。次に、三角形と頂点を2Dに投影し、2Dメソッドを使用することができます。

これはまた、三角形の平面上にないため、多くの頂点を削除するという利点があります。これは、迅速な計算です。

0

ポイントが三角形の平面上にあるかどうかをチェックするには、三角形の平面方程式を書くことができます。それは3点を使って書くのが簡単で、線形であるため計算が非常に速くなります。

方程式チェックhttp://en.wikipedia.org/wiki/Plane_(geometryの書き方を理解するには、簡単です。外積はベクトルであるため、ポイントはそれが十分で無地の式を満足だとプレーン簡単なチェックであれば、あなた精度を決定するため