2012-04-30 9 views
0

私のオブジェクトはポイントx、yを持ちます。これは、マウスが800x600ボックスの中にドラッグすると常に変化します。私のオブジェクトはマウスで設定された角度にも回転し、360度になります。私の問題は、その角度から、もちろんそのXY位置から発射物を撃つ方法です。発射体は一直線に進む必要がありますが、主要なオブジェクトと同じ角度で動く必要があります。私は角度を持っていて、必要なのは、適切な角度からグリッドを横切るようにするための式です。2d発射軌道?

EDIT - 現在のJSFIDDLEは投射物が正しい角度で撮影されていません。

http://jsfiddle.net/vbk4Z/16/
+1

私はBresenhamのアルゴリズムから始めるでしょう: http://ja.wikipedia.org/wiki/Bresenham%27s_line_algorithm –

+0

@WoodrowDouglass私はそうではありません - あなたが最後の終点を知っていなければ助けになりません。 – Alnitak

+0

tragectoryがstreightラインの場合は、始点と角度を持つエンドポイントを簡単に計算できます。 x = x0 + d * cos(theta)、y = y0 + d * sin(theta)ここで、dはバッファの端から線を外したい場合は任意の大きな距離です。 –

答えて

2

標準式は次のとおり(x0, y0)は元の位置である

xn = x0 + v * t * cos(theta) 
yn = y0 + v * t * sin(theta) 

v必要な速度で、thetaは角度(ラジアン)であり、tは弾丸が発射されてからの時間です。

これは、正のx軸に対して、そしてy軸を上に向けて、反時計回りのの角度の古典的な慣例を使用することに注意してください。

ブラウザを座標使って、ベアリングを(時計回りの相対/「北」「最高」に)使用することを選択したために起こるしている場合、あなたは、いくつかの兆候とtrigの機能を交換する必要があります。

xn = x0 + v * t * sin(theta) 
yn = y0 - v * t * cos(theta) 
+0

ちょっとしたことがあるように見えましたが、ちょっとしたものです。例えば私がthetaとして0を使うとき、私のオブジェクトは北にまっすぐ上を向いていますが、私はあなたの公式を使って投射物を発射すると、180(東)に向かって撃ちます – Zakukashi

+1

標準的な数学の規則は、角度0として使い切っている場合は、90度を追加します。この場合は、π/ 2ラジアンをシータに追加します。例: 'xn = x0 + v * t * cos(theta + pi/2)' – Thomas

+0

@トーマスはただそれを試したが、まだ何かが間違っているようだ:http://jsfiddle.net/vbk4Z/4/ – Zakukashi