2017-03-21 6 views
-1

これはかなり簡単な質問かもしれませんが、私はこのコードを8時間以上書いていますので、私の脳はわずかにうんざりしています。基本的に、私は次のようなフレームを持っています:(http://imgur.com/a/DFSI5JFrameの角度/ウィンドウサイズを指定して座標を調整する

私の原図を言いたいなら、私は数学について疑問を抱いていました。角度θを考えると、私がしたいのは、特定のPointオブジェクトが与えられたとき、それは私が撮影する弾丸になります。どのようにx/y座標をその角度に沿って並行して調整するのですか? JFrame内には700x500のウィンドウサイズがあります。私はペーストビンにコードを掲載しますが、それが必要なのであれば、この質問は純粋に算術演算(sin/cos/tan)に関連していると感じました。

基本的に私は、この持っている:だからpinballCoordinate私はシータの角度を与え調整するためにしようとしているPointオブジェクトである、それはピンボールを撃つ「銃」である

 if(pinballAngle > 90){ 
      pinballCoordinate.x+=(pinballAngle/3); 
      pinballCoordinate.y-=20; 
     } 
     else if(pinballAngle < 90){ 
      pinballCoordinate.x+=(pinballAngle/3); 
      pinballCoordinate.y-=20; 
     } 
     else{ 
      pinballCoordinate.y-=20; 
     } 

を。 'pinballAngle'変数はガンの角度です。

+0

だから、あなたはJavaで正弦と余弦をうまくする方法を求めていますか? –

+0

それで問題は、問題に続く線形パスにまで沸騰する可能性があります。つまり、出発点があり、角度があり、開始点から離れた経路をたどりたいとします。ここでは、目標点を生成するために円上の点を計算することに戻ります。次に、それらの点の間の直線をたどる必要があります:P - おそらく少し畳み込まれていますが、私はこのような問題が発生したときに解決してください;) – MadProgrammer

+0

引用された例[here](http://stackoverflow.com/a/4550667/230513)を参照してください。 – trashgod

答えて

0

まず、あなたはラジアン

int speed = 20; // the speed of the bullet 

double rad = pinballAngle * 2 * Math.PI/360; 
pinballCoordinate.x += (int) (Math.cos(rad)*speed); 
pinballCoordinate.y += (int) (Math.sin(rad)*speed); 

であなたの角度が必要になりますあなたは、おそらくそれが必要とされるいくつかの-=と交換し、xまたはyに反対を使用する必要があります。

数学のドキュメント: https://docs.oracle.com/javase/8/docs/api/java/lang/Math.html

+0

' - ='は必要ありません。正弦と余弦はすでに正しい正/負の値を生成しています。 – GameGibu

+0

'y'には' - = 'が必要ですが、' x'には '+ ='が必要です。 –

+0

@DavidWallaceほとんどのレイアウト/描画ユーティリティで使用される逆Y軸を修正している場合に当てはまります。ジオメトリは、これらの場合、回転が反対方向に表されるように、垂直に反転されるだけである。 – GameGibu

関連する問題