C# - 三角函数代码解释(物理)

时间:2009-10-14 15:04:39

标签: c# xna physics trigonometry

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

  

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

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

为什么他们只能在弧度上使用角度来找到x位置然后找到斜边指向的方向的y位置同样的东西。

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

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

更新

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

对象点。 鼠标点。

5 个答案:

答案 0 :(得分:10)

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

cos^2 theta + sin^2 theta = 1.

x = cos thetay = sin theta一样,点(x, y)满足x^2 + y^2 = 1,因此(x, y)位于单位圆上。

要反转这一点,给定单位圆上的一个点,您可以使用inverse tangent(可能已知为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

在C#中,Math.Atan是我上面提到的函数arctanMath.Atan2是我上面提到的函数atan2

答案 1 :(得分:4)

     |
    y.-----* P
     |    /|
     |   / |
     | r/  |
     | / a |
     |/)___.__
    O          x

    we have:

    a = angle in radians
    O: origin
    P: known point
    r: distince between O & P

    to calculate x, y:

         x = r*cos(a)
         y = r*sin(a)

(in your example : r = 1, a = cannon.rotation)

现在,如果你有x,y,你想要一个:

if x!= 0  a = atan(y/x)
otherwise a = sign(y)*Pi/2

了解更多信息(&amp;更漂亮的图表):Wikipedia: Polar coordinate system

答案 2 :(得分:2)

你可以看到cos和sin在圆上返回点。

在这方面,看到正典的中间是圆圈的中心。然后给出一个角度(正典的角度),你可以得到它所指向的圆与sin和cos的位置。 如果你认为大炮以0,0位置为中心,那么这个值也是子弹应该前往的方向。

回答2:如果你知道x和y,你需要知道角度..你需要atan函数,它返回三角形的倾斜边形成的角度,其中一个点是0,0,另一个点是x,y点和一个点是90度角

的点

答案 3 :(得分:2)

可悲的是,这是一个很好的问题,其中SO不是最好的答案。

我认为学习参数方程会有所帮助,而不是在文本中解释。您可以先在Google中搜索“圈参数方程”。

这个概念点击给我的方式是试验不同的代码片段,直到我理解了罪,cos,圆和角度之间的关系。看图片和图片也有很多帮助。在此之前,我会阅读描述,但永远无法牢牢掌握解释。

答案 4 :(得分:0)

如果你不熟悉trig,你要问的是很难解释的。

有问题的代码行计算球的方向的单位矢量,我认为它将从大炮中射出。事物的Cos和Sin部分分别提取了大炮角度的X和Y分量。所以,在大炮指向的地方,那就是球射向的方向。

这有点误导,因为结果很可能只是一个方向,而不是一个实际的速度。我假设在那个下方有一条线将该矢量乘以一个常数,以使球具有最终的移动速度。