Javascript 检测两个圆之间的碰撞角
我检测到两个圆之间的碰撞,如下所示:Javascript 检测两个圆之间的碰撞角,javascript,math,collision-detection,Javascript,Math,Collision Detection,我检测到两个圆之间的碰撞,如下所示: var circle1 = {radius: 20, x: 5, y: 5}; //moving var circle2 = {radius: 12, x: 10, y: 5}; //not moving var dx = circle1.x - circle2.x; var dy = circle1.y - circle2.y; var distance = Math.sqrt(dx * dx + dy * dy); if (distance <
var circle1 = {radius: 20, x: 5, y: 5}; //moving
var circle2 = {radius: 12, x: 10, y: 5}; //not moving
var dx = circle1.x - circle2.x;
var dy = circle1.y - circle2.y;
var distance = Math.sqrt(dx * dx + dy * dy);
if (distance < circle1.radius + circle2.radius) {
// collision detected
}
我的问题是如何检测圆环2的碰撞角?圆圈2没有移动。
如果您能用简单的三角学来检测角度,我将不胜感激 切线=相反/相邻
因此,让angle=Math.atandy/dx你可以用一些简单的三角法来检测角度 切线=相反/相邻 因此,让angle=Math.atandy/dx解: 我想我明白了: 弧段^2+rb^2-c^2/2*ra*rb 其中: c是你问题中两个圆中心之间的距离 ra是第一个圆的半径 rb是第二个圆的半径 代码: 在带有值的JavaScript中,应该给出:
const angleInRadians = Math.acos((circle1.radius*circle1.radius + circle2.radius*circle2.radius - distance*distance)/(2*circle1.radius*circle2.radius))
请注意,结果以弧度为单位,请参见
如果希望以度为单位,只需使用转换:
const angleInDegrees = angleInRadians / Math.PI * 180
说明:
圆之间的角度定义为任意交点处切线之间的角度。如果有两点,则两个角度相同
切线之间的角度与相应半径之间的角度相同,因为半径与切线正交
要获取半径之间的角度,请执行以下操作:
在两个中心和一个交点之间画一个三角形。基于交点处的角度使用
c^2=ra^2+rb^2-2*ra*rb*cosapha
如果您需要更多解释,请随时发表评论。解决方案:
我想我明白了:
弧段^2+rb^2-c^2/2*ra*rb
其中:
c是你问题中两个圆中心之间的距离
ra是第一个圆的半径
rb是第二个圆的半径
代码:
在带有值的JavaScript中,应该给出:
const angleInRadians = Math.acos((circle1.radius*circle1.radius + circle2.radius*circle2.radius - distance*distance)/(2*circle1.radius*circle2.radius))
请注意,结果以弧度为单位,请参见
如果希望以度为单位,只需使用转换:
const angleInDegrees = angleInRadians / Math.PI * 180
说明:
圆之间的角度定义为任意交点处切线之间的角度。如果有两点,则两个角度相同
切线之间的角度与相应半径之间的角度相同,因为半径与切线正交
要获取半径之间的角度,请执行以下操作:
在两个中心和一个交点之间画一个三角形。基于交点处的角度使用
c^2=ra^2+rb^2-2*ra*rb*cosapha
如果您需要更多的解释,请随时发表评论。使用两个圆的中心点,您应该能够计算角度:使用两个圆的中心点,您应该能够计算角度:顺便说一句,有人知道我们是否可以使用乳胶,例如?@adam west:这花了我一点时间,但我想我现在有了正确的解决办法。请参阅我最后一个版本的答案。谢谢您的支持explanation@adamwest:还请注意,这可能会给您一个钝角,而不是像我的图片中那样的锐角。要解决这个问题,就拿数学来说吧。minangleInDegrees,180-angleInDegrees。顺便说一句,有人知道我们是否可以在上面使用乳胶吗?亚当·韦斯特:这花了我一点时间,但我想我现在有了正确的解。请参阅我最后一个版本的答案。谢谢您的支持explanation@adamwest:还请注意,这可能会给您一个钝角,而不是像我的图片中那样的锐角。要解决这个问题,只需使用Math.minangleInDegrees,180 angleInDegrees。