的と玉をドラッグで移動させて、 玉をクリックして発射!! 最初の玉の位置を A(ax, ay)、的の位置を B(bx, by) とします。 最初の玉の速度を V(vx, vy) とします。 重力加速度の大きさに g を用います。 玉が着弾するまでの時間を t と置きます。 まず、水平方向の式を立てます。 着弾した時に、的の位置と等しくなるので、 bx = vx * t + ax bx - ax = vx * t t = (bx - ax) / vx 次に、垂直方向の式を立てます。 着弾した時に、的の位置と等しくなるので、 by = vy * t - 1/2 * g * t^2 + ay by - ay = vy * t - 1/2 * g * t^2 t = (bx - ax) / vx を代入して、 by - ay = vy * (bx - ax) / vx - 1/2 * g * ((bx - ax) / vx)^2 (bx - ax) を dx、(by - ay) を dy とします。 dy = vy * dx / vx - 1/2 * g * (dx / vx)^2 V(vx, vy) を、速さ v と向き theta に変換します。 vx = v * cos(theta) vy = v * sin(theta) dy = vsin(theta) * dx / vcos(theta) - 1/2 * g * (dx / vcos(theta))^2 dy = dx * tan(theta) - 1/2 * g * dx^2 / v^2 * (tan(theta)^2 + 1) dy / dx = tan(theta) - 1/2 * g * dx / v^2 * (tan(theta)^2 + 1) G = 1/2 * g * dx / v^2 とします。 dy / dx = tan(theta) - G * (tan(theta)^2 + 1) (dy / dx) / G = tan(theta) / G - (tan(theta)^2 + 1) tan(theta)^2 - 1/G * tan(theta) + (dy / dx) / G + 1 = 0 tan(theta) = (1/G +- root (1/G^2 - 4 * ((dy / dx) / G + 1))) / 2 G = 1/2 * g * dx / v^2 theta = arctan((1/G +- root (1/G^2 - 4 * ((dy / dx) / G + 1))) / 2)