1

私のプログラムでは、中心から来る線の前にある長方形をプロットする必要がありました。

このように長方形を3D空間でgluLookAt方向付けるために、lookAtポイントを指定して、長方形の図形をプロットしました。これは私にとっては正しく機能しました。

長方形を描画するために(私のフレームワークでは、後ろにopenGLを使用します)、長方形クラスを使用して、3Dで拡張しましたNode(ノードはlookAtポイントを持つものです)。幅、高さ、および上部の頂点を指定すると、長方形が描画されます(ノードは左上の頂点にあり、lookAtを使用して長方形の方向を設定します)。

NodeまたgetPosition()、3D位置を表示する機能もあります(長方形の左上-たとえば300,400,20)。操作に使用するために、3D空間内の他の3つの頂点の位置を取得しようとしています。長方形は3D空間に配置されているため、幅と高さを追加するだけでは、他の3つの頂点をフェッチすることはできません。長方形を3Dに向けた状態で、他の3つの頂点の位置を取得するにはどうすればよいですか?

4

2 に答える 2

1

座標の最小量は9よりわずかに少ないです。これは、3D空間(Ax、Ay、Az、Bx、By、Bz、Cx、Cy、Cz)の一般的な長方形の3つの頂点です。

最後のものは、例えば、D = A +(BA)+(CA)= B+CAです。

わずかに少ない理由は、A、B、C座標のトリプレットが必ずしも90度の角度を形成するわけではないということですが、単純化された可能な配置を追求し、外積を計算する準備をすることは実際にはあまり意味がありませんまたはベクトルを正規化します。

 A----B
 |    |
 C---(D)

編集:ベクトル算術プライマリ:

ベクトルを加算/減算するには、要素を合計します。A = B + Cは(ax = bx + cx; ay = by + cy; az = bz + cz)を意味します。

(任意の次元)の内積は、項の積の合計です。dot(A、B)= ax * bx + ay * by + az * bz; // 2、3、4の場合、任意の数の要素/次元。

外積は、少なくとも2次元と3次元で明確に定義された特別な演算子です。外積の幾何学的解釈の1つは、パラメーターの両方のベクトルに垂直なベクトルを生成することです。

Aがベクトル(ax、ay、az)の場合、原点からの方向ベクトルO =(0,0,0)、つまりA = AO =(ax-0、ay-0、az-0);も意味します。同様に、(BA)はAからBへの[方向]ベクトルです(ABと表記されることもあります(上に矢印->))

これらの有向ベクトルを「追加」することができます。例:

    o----->
           \
            \
      <------o
     /
    /
   x

したがって、ベクトルA +(BA)+(CA)を追加すると、点Dで終了します。

于 2013-01-02T11:30:17.547 に答える
0

長方形の法線を使用して、他の 3 点の位置を取得できます。空間内で長方形を方向付けるには、次の 2 つの情報が必要です。

  • その位置。通常、3 または 4 成分のベクトル、または 4x4 行列として表されます。
  • その向きは、一般に四元数として表されます。

方向が法線で表されていて、点が 1 つしかない場合、他の点を推測することはできません(法線の周りの回転方程式を解くには別の情報が必要なため)。クォータニオンを使用して空間内の物を方向付けるのが最善の方法だと思います (法線を取得することもできます) が、長方形から法線 + 1 ベクトルを使用することもできます。あなたは1つのポイントとタプル(幅、高さ)しか持っていないと言ったので、×操作に基づく一般的な方法はうまくいきません。

次のことをお勧めします。

  • クラスを向きを正しく処理するNodeクラスにします。lookAtその仕事のために設計されていません。
  • 平行移動行列 (位置) をクォータニオン (方向) からのキャスト行列と組み合わせて、位置と方向の両方を正しく処理します。
  • rotated × normalその行列を使用して、3 点を取得するために使用する回転ベクトルを抽出します。
于 2013-01-02T12:36:09.657 に答える