gpt4 book ai didi

确定绕圆移动的两个点是否接近或分离的算法

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:16:08 25 4
gpt4 key购买 nike

我正在寻找一种算法来确定以已知速度绕圆移动的两点 (p1, p2) 之间的距离是否从它们之间较小的圆弧的角度来看是增加还是减少。

enter image description here

  • 我知道 p1 和 p2 的位置(以度数/弧度表示)。
  • 我知道两个物体在统一尺度上的速度(piV、p2V)。
  • 我知道 p1 和 p2 之间短弧的绝对值(以度/弧度表示)(始终为正值)。但是,如果它有帮助,我也可以知道短弧是负值还是正值,因为当 p2 在后面(右)时从 p1 的角度来看它是负的,如果 p2 在前面(左)则它是正的。<
  • 当它们逆时针移动时速度为正,如果它们“逆行”(顺时针移动)则为负。

最佳答案

这道题真正的挑战在于处理180度的极坐标奇点,所以我会跳过这一步,用向量数学代替,效率稍低但更容易理解。希望其他更擅长模块化算法的人可以解决这个问题。

将角度位置转换为笛卡尔坐标:

(X, Y) = R * (cos θ, sin θ)

假设对象有笛卡尔坐标P1, P2 .引入二维叉积:

A ^ B = Ax By - Ay Bx

如果 A 相对于 Be 顺时针旋转,则为正,反之亦然。

假设物体有角速度W1, W2 ,其中正号表示按照极坐标的常规逆时针方向行进。

当对象 2 顺时针旋转 w.r.t.对象 1( P1 ^ P2 < 0 ,如您的图表所示):

  • 如果W1, W2 > 0W2 > W1
  • 或者,如果W1, W2 < 0-W1 > -W2
  • 或者如果W1 < 0W2 > 0

... 物体正在相互移动;反之亦然,交换对象标签。将其编译成一个条件:

sign(W1 - W2) == sign(P1 ^ P2) != 0

顺便说一句,P1 ^ P2 = R^2 sin(θ2 - θ1)使用三角身份,所以只需检查 sin(θ2 - θ1) 的符号会工作。

编辑:事实证明,通过考虑正弦函数的行为,将条件减少到单个正弦项使模块化逻辑更加清晰 -

sign(P1 ^ P2) = sign(180 - [θ2 - θ1] % 360)

关于确定绕圆移动的两个点是否接近或分离的算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50891619/

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