关于2D游戏的角度和方向有哪些约定?

Ont*_*tor 2 java conventions angle

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

我有三个主要问题:

  1. 0弧度应该在哪里?(它应该指向上方,是否指向右侧等)

  2. 应该顺时针转动增加还是减少值?

  3. 该值的范围是0到(2*pi)还是从-pi到pi?

App*_*ish 7

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

因此,这些约定并不是java独有的,因为它们是处理角度时要遵循的一组良好规则:

  • 0弧度在右边.
  • 增加角度意味着逆时针移动,因此pi/2弧度上升,pi离开,等等.

最后一个有点棘手.从数学上讲,单位圆周围的角度范围是[0, 2pi],我更喜欢使用角度.通常,这会使事情变得更容易,但是一些java函数似乎使用了另一种方法.主要三角函数sin,cos以及tan可以接受任何数量的输入(例如sin(pi)== sin(3pi)),就像这些功能在数学所访问的所有实数.这些功能的范围与pi无关.但是,反三角函数(asin,acosatan,但不是atan2)具有在javadoc中定义的有限范围:

 the returned angle is in the range -pi/2 through pi/2.
Run Code Online (Sandbox Code Playgroud)

这与数学也是一致的.因此:

  • 大多数时候,你应该使用[0, 2pi].它更易于阅读,更易于操作.
  • 在处理反三角函数时,请记住它们的范围是 [pi/2, -pi/2]并根据需要进行转换.