gpt4 book ai didi

c# - 如何计算弹跳角?

转载 作者:IT王子 更新时间:2023-10-29 03:44:12 28 4
gpt4 key购买 nike

我玩了一会儿,但我就是想不通。

我制作了一个发射导弹的坦克,当导弹击中墙壁时,我希望它们弹开,但我希望它们弹开到正确的角度。

现在我没有任何障碍物,当导弹超出我制作的 viewportRectangle 时,它们就会反弹。

我正在寻找的解决方案是否非常先进?

有没有比较简单的方法呢?

最佳答案

您可能会认为,因为您的墙与坐标轴对齐,所以编写特殊情况代码是有意义的(对于垂直墙,否定速度的 x 坐标;对于水平墙,否定 y 坐标的速度)。然而,一旦您的游戏在垂直和水平墙壁上运行良好,您接下来可能会想到的是,“任意角度的墙壁怎么样?”因此,从一开始就考虑一般情况是值得的。

在一般情况下,假设您的导弹的速度为 v 并以表面法线 n 撞击墙壁。

Missile with vector v about to obliquely hit a wall with surface normal n.

v 分成垂直于墙的 u 和与其平行的 w 部分。

Right-angled triangle with hypotenuse for v, short side u parallel to wall and long side w parallel to wall.

地点:

u = (v · n/n · n) < strong>n
w = vu

这里,v · n是向量vndot product。有关如何计算它的说明,请参阅链接。点积 n · n 的计算结果为法向量长度的平方;如果您始终将法线保持为 unit vectors 的形式,则 n · n = 1 并且您可以省略除法。

弹跳后,平行于墙壁的运动分量受摩擦力f的影响,垂直于墙壁的分量受弹性的影响,可以用a coefficient of restitution < em>r.

所以碰撞后的速度是v′ = f wr u 。在完全弹性、无摩擦的碰撞中,v′ = wu;也就是说,运动反射(reflect)在碰撞点的法线附近,如 Bill 的回答中给出的图表所示。

这种方法在三个维度上也同样有效。

(显然,这是一个非常简化的弹跳概念;它没有考虑角动量或变形。但对于许多类型的视频游戏来说,这种简化已经足够了。)

关于c# - 如何计算弹跳角?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/573084/

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