なぜボールが曲がるかっていうと、重力が働いているからですね
図にするとこんな感じ
傾斜角θの時、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;
}
}
こんな感じでボールが転がる処理は完成
