1

2次元空間では、座標x1とy1のオブジェクトがあり、それは特定の方向を向いています。これを「ビューア」と呼びます。開始時、オブジェクトの回転を測定する角度は0であるため、オブジェクトは常に同じ方向を向いて開始します。角度はyrotと呼ばれる変数によって測定されます。

Dをsqrt((x1-x2)^ 2 +(y1-y2)^ 2)によって決定されるオブジェクトからの距離とし、この距離が既知であると見なします。

ここで、ビューアの座標、D距離、およびyrot角度がわかっているので、ビューアオブジェクトの顔から距離Dにあるオブジェクトの座標x2、y2を決定します。

これを明確にするために、私が欲しいものを説明するための簡単なマトリックスを追加します。

Z 0 0

0 0 0

0 0 V

Vは視聴者であり、VはZの方を向いています。私は、Vの前(特定の距離)にオブジェクトがある場合にのみ関心があります。言い換えると、ZがVから距離D(既知)にあると仮定すると、Zがオブジェクトである場合にのみ関心があり、他には何もありません。

必要な座標はx2=x1(+/-)d *sinyrotだと思います。y2 = y1(+/-)d * cos yrot; これが正しい式であるかどうかはわかりませんが、機能していないようです。また、第2オペランドの符号に隣接するかどうかもわかりません。

不明な点がございましたら、コメントを残してください。できる限り迅速に回答できるよう最善を尽くします。

ありがとうございました!

後で編集:|| <-視聴者向け、yrot = 0; []<-ビューア

        = [] <- viewer yrot = 90 degrees. 

これにより、yrotが何であるかが明確になります。また、オブジェクトは必要なだけ回転でき(> 2 PI)、時計回りと反時計回りの両方で回転できます。

チャールズ・ブレタナの答えはほぼ正しいようです。それが過回転(> 360度回転)と異なる方向への回転をカバーしているかどうかはわかりません。

4

1 に答える 1

7

点A(ax、ay)が与えられると、角度tで表される方向(t: - pi < t < + pi正のx方向から反時計回りに測定される)でAから距離dである点B(bx、by)の座標は次のようになります。なれ:

 bx = ax + d*cos(t)
 by = ay + d*sin(t)

このアプローチがあなたの質問に一致するかどうかは正確にはわかりません。あなたの質問から、どの角度yrotが表すのかが明確ではないからです。ただしyrot、視聴者の視線と正のX軸を持つ点Bとの間の角度を単純に決定する場合は、上記が機能するはずです。

過回転をカバーするには、yRotを取り、結果が-Piと+Piの間になるまで2*Piを引きます。

于 2012-12-15T19:13:55.363 に答える