2017-02-27 9 views
0

座標を含むベクトルを取得したいと思います。私は私の始めの座標、角度、距離を知っています。これまでのところ、私はやってみました:座標、角度、距離を取得するポイントを取得する

Vector2 pos = new Vector2(beginningX, beginningY).add(distance, distance).rotate(angle); 

しかし、それは期待どおりに動作しません。回転が0でない場合、座標は大きくなり、終点は私が期待しているところにはありません。私はこれが単純な問題でなければならないことを知っていますが、私はそれを解決できません。

EDIT: がやってみました:

Vector2 pos = new Vector2(beginningX, beginningY).add(distance, 0).rotate(angle); 

まだ成功(distanceのみxに追加)。

+0

角度が必要ですか?あなたはベクトル(1,1)を持っていて、(2,3)を加えて(3,4)を得るとしましょう。これはあなたが求めているものではありませんか、私はあなたの質問を誤解していますか?編集:ちょうどy座標に距離を追加すると、既存の1つに垂直ベクトルを追加するようなものです – vikeri

答えて

3

私はあなたが間違ったことをやっていると言うだろう:あなたは距離ベクトルを回転させて位置ベクトルに追加する必要があります。

Vector2 pos = new Vector2(beginningX, beginningY).add(new Vector2(distance, 0).rotate(angle)); 

あなたは、ベクトル数学上に読みたいかもしれないが、基本的には量

ベクトルを回転すると、常に点0/0を中心に回転しています。したがって、あなたは、x軸上の距離に0/0からの距離をカバーしてベクトルを作成することをお勧めします:

0---------------->d 

今、あなたは、いくつかの角度によってそのベクトルを回転させる:

 d 
    /
    /
    /
/
/
0 

その後あなたは、あなたの出発点でそのベクトルをオフセットあなたは二つのベクトルを(簡単にするために、私はあなたの出発点がy軸上にあると仮定)を追加すなわち:

 d 
    /
    /
/
/
/ 
s 
| 
| 
| 
0 
+0

私は数学のクラスで有用なものを学ばない理由は不思議です。 –

+0

@LórántGerberは1つしか推測できません;) – Thomas

+0

ベクトルは数学のクラスで教えられます。あなたは正しいものを取るだけです。 – duffymo

2

あなたが唯一の距離ベクトルを回転させるのではなく、する必要があります始まりの和ningと距離。さらには、あなたがこの方法を試すことができますので、オーダー(可換)のいずれかで同じである:

Vector2 pos = new Vector2(distance, 0).rotate(angle).add(beginningX, beginningY); 

利点:この連鎖呼び出しはすぐにガベージコレクタのためのゴミになる開始位置のための一時的なベクトル2を作成しません。あなたのコードが何百万ものベクトルを扱うときには、スペースとガベージコレクションの時間を節約することが重要です。

0

これは単純なベクターの追加です。私は、x軸から反時計回りに測定した角度で​​、2D座標を想定しています:

x(new) = x(old) + distance*cos(angle) 
y(new) = y(old) + distance*sin(angle) 

あなたは三角関数にそれらを接続したときに、あなたの角度はラジアンであることを確認してください。

関連する問題