我在一本处理书中的例子中描述了如何计算非正交碰撞(一个球在非水平面上弹跳),但是,我并不真正理解这四个表达式背后的逻辑。
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;
他们应该计算地面坐标和球速度的临时值,以计算碰撞,就好像它是正交的一样。余弦和正弦是地面旋转的值,速度变量是球的速度。我无法理解表达式实际上正在做的事情,以使地面水平,本书并没有很好地解释它。任何帮助,将不胜感激。
答案 0 :(得分:3)
这些表达式是旋转的传统表达式。如果你取一个点(x,y),然后用角度θ旋转它,你将获得一个带坐标的点(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