0

衝突検出コードで使用しているコードは次のとおりです。

(注:Vector3fはLWJGLライブラリーの一部です。)

(注2:Triは、LWJGLのVector3fs。v1、v2、およびv3の3つで構成されるクラスです。)

public Vector<Tri> getTrisTouching(Vector3f pos, float radius){
        Vector<Tri> tempVec = new Vector<Tri>();
        for(int i = 0; i < tris.size(); i++){
            Tri t = tris.get(i);

            Vector3f one_to_point = new Vector3f(0,0,0);
            Vector3f.sub(pos,t.v1,one_to_point);            //Storing vector A->P

            Vector3f one_to_two = new Vector3f(0,0,0);
            Vector3f.sub(t.v2,t.v1, one_to_two);            //Storing vector A->B

            Vector3f one_to_three = new Vector3f(0,0,0);
            Vector3f.sub(t.v3, t.v1, one_to_three);            //Storing vector A->C

            float q1 =  Vector3f.dot(one_to_point,  one_to_two) / one_to_two.lengthSquared();            // The normalized "distance" from a to
            float q2 =  Vector3f.dot(one_to_point,  one_to_three) / one_to_three.lengthSquared();            // The normalized "distance" from a to



            if (q1 > 0 && q2 > 0 && q1 + q2 < 1){
                tempVec.add(t);
            }
        }   

        return tempVec;
    }

私の質問は、空間内の点が私の三角形の1つに接触しているかどうかを正しく確認するにはどうすればよいですか?

4

2 に答える 2

1

ポイントが三角形の内側にあるかどうかをテストするには、テストポイントを原点とする光線を作成し、無限大まで延長します。簡単な方法としては、水平の光線があります(たとえば、yは一定で、xは無限大に増加します。次に、ポリゴンのエッジの1つと交差する回数を数えます。交差の数がゼロまたは偶数の場合は、三角形の外側にいることを意味します。 。これの良いところは、三角形だけでなく、どのポリゴンでも機能します。

http://erich.realtimerendering.com/ptinpoly/

于 2012-06-21T19:19:37.930 に答える
0

私があなたを助けることができる唯一の方法は、あなたにこのリンクを提供することです。残念ながら、私はLWJGLがあまり得意ではないGeometryので、ここにいます。-Vector3f _

それが役に立てば幸い!もしそうなら、答えにチェックを入れて受け入れてください。

于 2012-06-21T19:18:25.267 に答える