2012-03-02 6 views
-1

私は投球の動きに沿って飛行しています。私は関数を使用します: x =(vo.cos(alpha))。t;y =(vo.sin(alpha)).t-g.t.t/2; と私は矢印の接線の角度を計算しました。 タグベータ=(vo.sin(α)-g.t)/(vo.cos(アルファ)) と私は矢印で矢印を回転(α - ベータ)自然と同じ移動します。 これは私の機能onDarw()である:飛んでいるときに矢印を回す

保護のボイドonDraw(キャンバスキャンバス){= 1

canvas.drawColor(Color.WHITE); 
    Matrix matrix=new Matrix(); 
    degree= (float) (Math.atan(y1/x1)*180/Math.PI); 
    matrix.postRotate(degree,x,y); 
    matrix.postTranslate(x,y); 
    alpha=(float) ((90-degree)*Math.PI/180); 
    canvas.drawBitmap(bmp, matrix, null); 
    if(k==1){ 
     //y+=20; 
     //x=(float) ((-g)*Math.pow(y, 2)/(2*vo*vo*Math.pow(Math.cos(alpha), 2))+Math.tan(alpha)*y/10); 
     y=(float) (vo*Math.cos(alpha)*t); 
     x=(float) (vo*Math.sin(alpha)*t-(g*t*t)/2); 
     beta= (float) ((Math.atan((vo*Math.sin(alpha)-g*t)/vo*Math.cos(alpha)))*Math.PI/180); 
     matrix.postRotate((alpha-beta),y ,x); 
     matrix.postTranslate(y,x); 
     t++; 
    } 

kが、私はaction_upを実装する場合、それは成功していない操作を行う.But、矢が飛ぶだろうしたいです矢印の動きは自然ではありません。 私を助けてください。

+2

同じ質問でサイトをスパムしないでください。それは本当に便利ではありません。 – RivieraKid

答えて

0

v基本的に、矢印は移動の弧に対して接線方向に向いていると仮定する必要があります。つまり、その角度はx速度とy速度の比のarctanになります。だから、

、あなたは、xとyは、伝統的な命名法から切り替えているように見えます(、ところで(yは通常、各時間ステップで、xとyの速度を追跡し、その値

に基づいて新しい角度を計算します)方向は重力の影響を受け、おそらくそれはあなたの場合にはスクリーン座標である。

yv = v0 * Math.cos(alpha); // yv isn't changing so you can compute it outside 
          // the loop that increments time 

xv = v0 * Math.sin(alpha) - g*t 

if (yv != 0) { 
    beta = (float)Math.atan(xv/yv); 
} 
else 
{ 
    beta = xv < 0 ? -Math.PI/2 : Math.PI/2 
} 
+0

しかし、あなたは軌道を計算することができます、どのように? –

+0

しかし、あなたは軌道を計算することができます、どのように? –

関連する問題