矢量角速度 - 2D

计算科学 向量
2021-12-22 18:18:52

这原本是编程中的一个问题,但由于 Stackoverflow 上几乎没有人知道如何解决这个问题,所以我改为来到这里;https://stackoverflow.com/questions/23003612/javascript-angular-velocity-by-vector-2d

我想将 X 和 Y 速度转换为角速度,这是我目前用来通过 x 和 y 值计算初始速度然后将其转换为我的圆形对象的角速度的公式:

Av = Sqrt(Vx^2 + Vy^2) / R

角速度 = (速度 x^2 + 速度 y^2) 的平方根 / 圆的半径

这是它在我的编程中模拟的方式:http: //jsfiddle.net/yzb9P/2/(单击以更改球的位置)

现在,由于平方根不能为负,所以当球应该逆时针旋转时,这将不起作用。所以,我需要一个初始速度的签名版本,它也可以是负数,我该如何计算呢?

听说 Wedge 产品可以解决这个问题,我也读过很多关于它的文章,但我仍然不明白如何使用它,请帮助!

1个回答

叉积会告诉您角速度的大小和符号。通常,角速度由向量定义为

ω=r×v|r|2

在哪里ω是角速度,r是从旋转中心到所考虑的点的向量,并且v是速度向量。

在二维中,这变成

ω=rxvyryvxrx2+ry2

其中正值对应于逆时针旋转,负值对应于顺时针旋转。

编辑:
在看了你的 JSfiddle 之后,看起来你的实现有更严重的问题,即使球直接击中平坦的表面。如果您的速度非零,则您正在计算非零角速度,而不考虑所涉及的矢量方向。叉积将消除这种影响。我相信这就是你想要的:http: //jsfiddle.net/yzb9P/7/

编辑 2:
如果您希望您的球更逼真地滚动,您发布的代码中还有另一个错误。试试这个版本,球滚下斜坡而不会不自然地停下来。我只编辑了update()函数。http://jsfiddle.net/yzb9P/8/

编辑 3:
最终更新,改进了球的弹性实现:http: //jsfiddle.net/yzb9P/11/