在<canvas>
元素中,我对一组可能相互碰撞的圆进行了动画处理。有时,这些冲突发生在主循环的迭代之间,并且在下一次迭代中,这些循环彼此“内部”。
为了解决这个问题,我计算了两个圆之间的碰撞点(C),现在希望微调这些圆的坐标,以使它们的边缘在该碰撞点相交。我一直在调转它们的速度,以使它们沿着其原始矢量彼此远离,但我似乎无法正确地做到这一点。
如何计算A和B的“微调”坐标,使它们的边缘在C处相遇?
最佳答案
演示:http://jsfiddle.net/m1erickson/VtM7F/
就是这样:
var dx=C.x-A.x;
var dy=C.y-A.y;
var angleC=Math.atan2(dy,dx);
var newAX=C.x+A.radius*Math.cos(angleC-PI);
var newAY=C.y+A.radius*Math.sin(angleC-PI);
并对B做同样的事情。