なぜボールが曲がるかっていうと、重力が働いているからですね
図にするとこんな感じ
傾斜角θの時、x方向にg・sinθの力が加わり、ボールが曲がります
これをソースに起こしてみましょう
public class Ball { final public static int G = 9800; //重力加速度(mm/ss) final public static float u = 0.075f; //摩擦係数 public Plot position = new Plot(); //位置 public int speed; //並進速度(mm/s) public double angle; //進行方向(Radian) //移動処理(interval:経過時間(ms)) public void move(long interval) { //摩擦による減速処理 speed -= (u * G * interval) / 1000; //速度をXY成分に分割 int xSpeed = (int)(speed * Math.cos(angle)); int ySpeed = (int)(speed * Math.sin(angle)); double xa = getXTilt(prev.x, prev.y); //X方向の傾斜角取得 double ya = getYTilt(prev.x, prev.y); //Y方向の傾斜角取得 xSpeed -= (G * Math.sin(xa) * interval) / 1000; //X方向に働く重力による加速 ySpeed -= (G * Math.sin(ya) * interval) / 1000; //Y方向に働く重力による加速 angle = getAngle(0f, 0f, xSpeed, ySpeed); //重力により曲がった進行方向を取得 //XYの速度から位置を更新 position.x += (xSpeed * interval) / 1000; position.y += (ySpeed * interval) / 1000; } }こんな感じでボールが転がる処理は完成
0 件のコメント:
コメントを投稿