【发布时间】:2015-07-05 15:32:10
【问题描述】:
我们有两个圆圈,Circle1 和 Circle2,Circle2 是静态的,Circle1 是移动的。
圆 1 = C1,圆 2 = C2。
C1 有一个速度和方向,会导致它在某个点接触 C2。
v 是描述 C1 速度的向量。 d为C1中心点到C2中心点的距离。
我们也知道两个圆的半径。
第一帧:
C1 尚未与 C2 发生碰撞,但正如我们所见,它将在下一帧发生碰撞。
第 2 帧:
C1 现在与 C2 相交。
第 2 帧(计算后):
C1 现在已定位在它第一次接触 C2 的位置。
所以问题是,我们如何计算(最好在 js 中)沿 v 的点 C1 应该停止的位置?
当前代码:
// x^2 + B * x + C = 0
// x= v'
// B = 2 * (d.x * v.x + d.y*v.y)/Math.sqrt(v.x*v.x + v.y*v.y)
// C = (d.length()^2 - rs^2)
// get distance from ri to ri2 as a vector.
var d = new Vector(ri2.x - ri.x, ri2.y - ri.y);
// get sum of radiuses.
var rs = ri.r + ri2.r;
var A = 1;
var B = 2 * (d.x * v.x + d.y*v.y)/Math.sqrt(v.x*v.x + v.y*v.y);
var C = (d.length()^2 - rs^2);
var x1 = (-B + Math.sqrt(Math.pow(B, 2) - 4 * A * C)) / 2 * A;
var x1 = (-B - Math.sqrt(Math.pow(B, 2) - 4 * A * C)) / 2 * A;
// and then we get the lowest positive of x1 & x2.
【问题讨论】:
标签: javascript math vector simulation physics