gpt4 book ai didi

javascript - 根据circle1的速度计算两个圆接触的点

转载 作者:行者123 更新时间:2023-11-30 16:46:01 26 4
gpt4 key购买 nike

我们有两个圆圈,Circle1 和 Circle2,Circle2 是静止的,Circle1 是运动的。

Circle1 = C1,Circle2 = C2。

C1 的速度和方向会使其在某一点接触 C2。

v 是描述 C1 速度的向量。d为C1中心点到C2中心点的距离。

我们也知道两个圆的半径。

第 1 帧:

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.

最佳答案

触摸瞬间的中心距为

R12 = R1 + R2

所以使用余弦定理:

R122 = v'2 + d2 - 2*d*v'*Cos(dv)

对 v' 求解此二次方程并得到更小的正解值(如果存在 2 种情况)。

您可以通过向量 dv 的标量积求 Cos(dv)

余弦(dv) = d * v/(|d||v|)

所以最终的二次方程是

v'2 - v' * 2 * (d * v)/|v| + (d2 - R122) = 0

对于标准形式

x^2 + B * x + C = 0    
x= v'
B = -2 * (d.x * v.x + d.y*v.y)/Sqrt(v.x*v.x + v.y*v.y)
C = (d^2 - R12^2)

检查简单情况:圆半径 2 以 (0,0) 为中心,向右移动 (v = (10,0));以 (6,3) 为中心的静态圆半径 3。结果应该是 v'=2

B = -2*(6*10+3*0)/10= -12
C=45-(2+3)^2=20
Determinant = B*B - 4*C = 144-80 = 64
v'= (12 +- 8)/2
smaller value v'=2

enter image description here

关于javascript - 根据circle1的速度计算两个圆接触的点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31231971/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com