13/04/07 07:01:31.52 CtpA13/I
rot = 45 // 仰角 左下原点
xn, yn // 砲台、目標の画面座標
dx, dy // 砲台の向きとパワー 左下原点 ←これが砲弾の初期ベクトルと一致すると思ったのがそもそもの間違いでした。
引数(rot, x0, y0, x1, y1, var dx, var dy)
// 初期値
g = 400
dt = 0.05 // 画面座標を g * dt するとほぼ砲台ベクトルになる
PI = 3.14159
// 計算
rot = (-1) * signum(x1 - x0) * (90 - rot) - 90
rad = rot * PI / 180 // 角度からラジアンに変換
subx = x1 - x0 // x方向のターゲットとの距離
suby = y1 - y0 // y方向のターゲットとの距離
suby = (-1) * suby // 座標変換
// 画面座標を砲台比率に調整
subx2 = 80 + subx * 1.3 - sqrt(subx * subx * 0.4) // x軸上でほぼ当たる
suby = suby * (subx2 / subx)
subx = subx2
// 到着時間(フレーム数)を求める (サンプルのまま)
t = (-1) * (2 * subx * sin(rad)) / (cos(rad) * g * dt) + (2 * suby / (g * dt))
t = sqrt(abs(t))
dx = subx / t // x方向の移動量を求める
dy = dx / cos(rad) * sin(rad) // y方向の移動量を求める