gpt4 book ai didi

JavaScript - 向量 Angular 速度 - 2D

转载 作者:行者123 更新时间:2023-11-30 17:31:23 26 4
gpt4 key购买 nike

我正在使用 Canvas API 使用 JavaScript 制作游戏。

我执行圆分段碰撞,我需要通过它的速度矢量计算圆的 Angular 速度,我使用这个公式来做:

ball.av = ball.v.length() / ball.r

// ball.av = angular velocity
// ball.v = velocity vector, contains x and y values
// .length() = returns initial velocity (pythagoras) for example: return Math.sqrt(ball.v.x * ball.v.x + ball.v.y * ball.v.y)
// ball.r = radius

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

我听说 Wedge 产品正在为此工作,我也阅读了很多关于它的文章,但我仍然不明白如何在我的代码中实现它,请帮忙!

最佳答案

在一般情况下,如果球在表面上滚动,则 Angular 速度将是速度与表面法线在半径上的叉积。

ball.av = CrossProduct(surfaceNormal, ball.v) / radius;

但是如果你总是在 x 方向上的平面上,那么这就简化为:

ball.av = -ball.v.x / ball.r;

如果您没有叉积,这里有叉积。

float CrossProduct(const Vector2D & v1, const Vector2D & v2) const
{
return (v1.X*v2.Y) - (v1.Y*v2.X);
}

注意:如果球向后滚动,只需在您的计算中添加一个“-”符号或交换 crossProduct 调用中的参数,但我认为它们是正确的,正如我所写的那样。

表面法线是来自表面的垂直归一化(单位)向量。在您的情况下,表面法线是从接触点到圆心的归一化矢量。

作为旁注,当球滚动时将重力分量移到表面,请执行以下操作:

vec gravity;

gravity = gravity - surfaceNormal*dot(surfaceNormal, gravity);

然后您可以在球沿表面滚动时施加合成重力。

关于JavaScript - 向量 Angular 速度 - 2D,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23003612/

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