Java 2D游戏中关于角度和方向的约定是什么?

Java 2D游戏中关于角度和方向的约定是什么?,java,conventions,angle,Java,Conventions,Angle,我正在使用Java制作一个简单的类似小行星的游戏,其中涉及角度,但我不确定如何设置各种对象的角度和方向 我有三个主要问题: 0弧度应该在哪里?(是否指向上方、是否指向右侧等) 顺时针旋转应该增加还是减少该值 值的范围应该是从0到(2*pi)还是从-pi到pi 一般来说,在任何语言中,你都应该遵循关于角度的相同约定,因为角度实际上比计算机相关概念更具数学性,而且数学是通用的(例如,在任何合理的语言中,与角度相关的数学函数都应该,而且在我的经验中,它们的行为方式是相同的) 因此,这些约定并不是jav

我正在使用Java制作一个简单的类似小行星的游戏,其中涉及角度,但我不确定如何设置各种对象的角度和方向

我有三个主要问题:

  • 0弧度应该在哪里?(是否指向上方、是否指向右侧等)

  • 顺时针旋转应该增加还是减少该值

  • 值的范围应该是从0到(2*pi)还是从-pi到pi


  • 一般来说,在任何语言中,你都应该遵循关于角度的相同约定,因为角度实际上比计算机相关概念更具数学性,而且数学是通用的(例如,在任何合理的语言中,与角度相关的数学函数都应该,而且在我的经验中,它们的行为方式是相同的)

    因此,这些约定并不是java独有的,因为无论何时处理角度,它们都是一组很好的规则:

    • 0弧度在右边
    • 增加角度意味着逆时针移动,因此
      pi/2
      弧度向上,pi向左,等等
    最后一个有点棘手。从数学上讲,单位圆周围的角度范围是
    [0,2pi]
    ,这就是我喜欢使用角度的方式。一般来说,这会使事情变得更简单,但是一些java函数似乎使用了另一种方法。主要的三角函数
    sin
    cos
    tan
    可以接受任何数字作为输入(例如
    sin(pi)
    =
    sin(3pi)
    ),就像数学中这些函数的域都是实数一样。这些函数的范围与pi无关。但是,逆三角函数(
    asin
    acos
    atan
    ,而不是
    atan2
    )具有javadoc中定义的有限范围:

     the returned angle is in the range -pi/2 through pi/2.
    
    这也与数学一致。因此:

    • 大多数情况下,您应该使用
      [0,2pi]
      。它更容易阅读和操作
    • 在处理逆三角函数时,请记住它们的范围是
      [pi/2,-pi/2]
      ,并根据需要进行转换

    这真的取决于你-这是你的代码。标准的数学惯例是零弧度是正x轴的方向(指向右侧),增加的角度是逆时针方向。使用0到2*pi还是-pi到pi是首选,但您可能会检查圆弧函数返回的值。我有点困惑当角度增加时会发生什么,因为在正常数学中,0弧度通常是正x,π/2通常是正y,在计算机上指向下方(而不是在标准笛卡尔平面上向上)。@Ontonator啊,是的,这是计算机图形学中令人讨厌的一个方面。