我正在遵循处理书中描述如何计算非正交碰撞(球在非水平平面上弹跳)的示例,但是,我并不真正理解这四个表达式背后的逻辑。
float groundXTemp = cosine * deltaX + sine * deltaY;
float groundYTemp = cosine * deltaY - sine * deltaX;
float velocityXTemp = cosine * velocity.vx + sine * velocity.vy;
float velocityYTemp = cosine * velocity.vy - sine * velocity.vx;
他们应该计算地面坐标和球速度的临时值来计算碰撞,就好像它是正交的一样。余弦和正弦是地面旋转的值,速度变量是球的速度。我无法理解这些表达式实际上是如何使地面水平的,而且这本书也没有很好地解释它。任何帮助,将不胜感激。
最佳答案
这些表达式是旋转的传统表达式。如果你取一个点 (x,y),并将其旋转角度 theta,你将获得一个坐标为 (x',y') 的点:
x' = cos(theta)*x - sin(theta)*y y' = sin(theta)*x + cos(theta)*y
在你的例子中,假设 theta 是地面的角度,你想要进行反向旋转(因此使用角度 -theta)以使地面水平,这就是为什么符号与上面的公式不同( cos(-theta) = cos(theta) 和 sin(-theta) = -sin(theta))。
如果您想了解详细信息,请查看:http://en.wikipedia.org/wiki/Rotation_matrix
关于physics - 有人可以解释这些用于计算非正交碰撞的表达式背后的逻辑吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4479348/