2

私は4つのポイントを持っています、3つのポイントはVまたは<または>のように2つの線を作ります、あなたは考えを理解します、今私はその円錐(V)にあるポイントを手に入れましたそして私は上から左下と右下ですが、下の位置はありません。

多分これは役立つでしょう。 https://dl.dropbox.com/u/28109593/e​​xamplevec.png

そして、私はこの問題に対処するためのコードを持っています:

public float GetDist(Vector3f one, Vector3f two, Vector3f three, Vector3f p){


          Vector3f one_to_point = new Vector3f(0,0,0);
          Vector3f.sub(p,one,one_to_point);            //Storing vector A->P



          Vector3f one_to_two = new Vector3f(0,0,0);
          Vector3f.sub(two, one, one_to_two);            //Storing vector A->B

          Vector3f one_to_three = new Vector3f(0,0,0);
          Vector3f.sub(three, one, 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 b
          float q2 =  Vector3f.dot(one_to_point,  one_to_three) / one_to_three.lengthSquared();            // The normalized "distance" from a to c

これで、posベクトルが円錐内にあることがすでにわかっているので、画像の緑色の円のposで示されているように、posを取得するにはどうすればよいですか?

4

2 に答える 2

2

平面には、A、B、C、および D の 4 つの点があります (D は、ダイアグラムで pos とラベル付けしたものです)。任意の 2 点間に一意の直線を引くことができるため、A と D を結ぶ直線を見つけ、その方程式を次の形式で取得します。

    y = m_1 * x + c_1

点 B と C を線で結ぶために同じことを行います。

    y = m_2 * x + c_2

これで 2 本の直線がわかったので、この連立方程式のペアを解いて、図の緑色の円にある点 (x,y) を得ることができます。これを E と呼びます。E が与えられると、ベクトル BE の長さを計算し、ベクトル BC の長さで割ります。この値は、X質問で探している値です。

2 点を通る直線の方程式を見つける方法がわからない場合は、このリンクで詳細を確認してくださいhttp://www.ugrad.math.ubc.ca/coursedoc/math100/notes/zoo/eqline.html

これを行うためのよりシンプルでエレガントな方法があることは間違いありませんが、ここで他に答えが得られない場合は、このアプローチが目的を果たします。

于 2012-06-21T21:55:12.927 に答える
1

ベクトル代数をやったのは久しぶりですが、これが正しいかどうか見てみましょう。A から Pos への線が B から C への線と交差する緑色の点を探しています。

BA-Pos が形成する角度と BAC が形成する角度の比率を知っていれば、その比率は、B からグリーンまでの距離と B から C までの距離の比率と同じになると思います。B から、緑の方向は C の方向と同じなので、緑の位置を表すベクトルは

VectorGreen = VectorB + (x1 / x2)(VectorC - VectorB) //B へのベクトルに B から C へのベクトルの一部を加えたもの

x1 = arccos ( Normalize(VectorP - VectorA ) * Normalize(VectorB - VectorA) )// A から B および A から Pos の間の角度

x2 = arccos ( Normalize(VectorB - VectorA ) * Normalize(VectorC - VectorA) ) //A から B および A から C の間の角度

于 2012-06-21T22:17:04.327 に答える