C#-Trigonometric代码解释(物理)

Sha*_*ean 2 c# xna physics trigonometry

这段代码取自使用XNA框架构建的游戏.我想要解释一下它在三角形和物理学方面是如何工作的.

ball.velocity = new Vector2((float)Math.Cos(cannon.rotation),(float)Math.Sin(cannon.rotation));

ball.rotation是一个精灵的旋转,我应该想到的是弧度.

为什么他们可以使用弧度中的角度来找到x位置然后找到斜边指向的方向的y位置相同的东西.

我问这个的原因.我想了解这个框架如何计算trig.我试图让一个精灵转向鼠标所在的方向,即:x和y已知,我只需要角度.

所以这里有2个问题.解释上面的代码并将sprite指向已知点的方向.

更新:

我发现对象所在的点a不是(0,0),因为xna使用逆坐标系.所以我现在的变量是:

对象点.鼠标点.

jas*_*son 10

每个角度对应于单位圆上的一个点(单位圆是以半径为中心的原点的唯一圆;也就是说,单位圆是满足的点的集合x^2 + y^2 = 1).对应关系如下:给定角度theta,theta对应于该点(cos theta, sin theta).为什么(cos theta, sin theta)住在单位圈?因为每个人都喜欢的身份

cos^2 theta + sin^2 theta = 1.
Run Code Online (Sandbox Code Playgroud)

这是x = cos thetay = sin theta,点(x, y)满足x^2 + y^2 = 1,这样(x, y)是在单位圆上.

要反转这一点,给定单位圆上的一个点,您可以通过使用反正切(可能已知为arctanatan有时tan-1)来找到角度.准确地说,(x, y)在单位圆上给出的是你可以(x, y)通过计算找到对应的角度theta = arctan(y / x).

当然,这里有一些杂乱的细节.该功能arctan不能告诉输入之间的差异(x, y),并(-x, -y)因为y / x(-y / -x)具有相同的符号.而且,arctan无法处理输入的地方x = 0.因此,我们通常通过定义atan2将为我们处理这些混乱细节的函数来处理这些问题

atan2(y, x) = arctan(y / x)       if x > 0
            = pi + arctan(y / x)  if y >= 0, x < 0
            = -pi + arctan(y / x) if y < 0, x < 0
            = pi / 2              if y > 0, x = 0
            = -pi / 2             if y < 0, x = 0
            = NaN                 if y = 0, x = 0
Run Code Online (Sandbox Code Playgroud)

在C#中,Math.Atanarctan我上面提到Math.Atan2的功能atan2,是我上面提到的功能.