在我创建的游戏中,我需要一种方法来计算距离,直到一个圆与另一个圆碰撞。它们都具有相同的半径。通常,我只使用Math.hypot
,但是圆圈已经有一个角度来指示其运动。因此,我需要一个新的系统来进行计算。到目前为止,我已经尝试绘制一条在每个方向(大于游戏屏幕)延伸80个单位的线,并计算目标相对于此的位置。到目前为止,这是我的代码:
var hypot = (a, b) => Math.sqrt((a[0] - b[0]) ** 2 + (a[1] - b[1]) ** 2);
var distToCol = (pos1, pos2, rad) => {
var dist = (a, b) => (a[0] - b[0]) ** 2 + (a[1] - b[1]) ** 2;
var endp = [80 * Math.cos(rad) + pos1[0], 80 * Math.sin(rad) + pos1[1]];
var endn = [-80 * Math.cos(rad) + pos1[0], -80 * Math.sin(rad) + pos1[1]];
var c = hypot(endn, endp);
var t = ((pos2[0] - endn[0]) * (endp[0] - endn[0]) + (pos2[1] - endn[1]) * (endp[1] - endn[1])) / c;
var s = dist(pos2, [endn[0] + t * (endp[0] - endn[0]), endn[1] + t * (endp[1] - endn[1])]);
s **= 2;
if (s > 2)
return Infinity;
var d = Math.sqrt(dist(endn, pos2) - s ** 2);
return d - 2;
};
任何帮助将不胜感激!