如何把这个算法变成没有循环的东西

我不确定这是否比 Stack Overflow 更适合提出这个问题。 在标准程度上,我有一个我用 Java 创建的算法来计算一个数字,但是我觉得有一种更好的方法来编写它,而不需要简单地包含 use floor 和类似点的循环。

所以下面是我的算法:

float startAngle = getRotation();
double dAngle = (startAngle < 0 ? -Math.PI : Math.PI);
double endAngle = (float)((destination % 2 == 0) ? 0 : dAngle/2);
while (Math.abs(endAngle - startAngle) > Math.PI/2)
  endAngle += dAngle;

用不太复杂的术语来说,它执行以下操作:

  1. 获取物体的当前角度
  2. 根据对象是否向左旋转或适当(额外的左转或更好的理想)获得增量角度
  3. 根据目标是否需要平行或垂直旋转到 0,定义将对象旋转到的角度
  4. 只要完成角度和开始角度之间的差异大于 90 级,就可以通过步骤 2 中的 delta 来更改完成角度

这一切背后的原因是我在屏幕上以随机角度打牌,4 个玩家中的任何一个都可以拿走(其中目的地 0 是屏幕的历史最低点,1 在左边,2 是顶部,3合适)。 我想以最快的距离转动扑克牌,以便在玩家拿到牌时与他们打交道。 该算法可以正常运行,但是就像我之前声称的那样,似乎应该有一种方法可以在没有循环的情况下执行此操作。 在那儿?

2
2022-06-07 14:38:34
资源 分享
答案: 1

一旦有了要旋转的角度,就可以尝试将其减小到 $(-\pi,\pi)$ 范围内。 我不知道 Java 是否会对实数进行模运算,也不知道如果您对 $a \lt 0$ 执行 %$\pi$ 会返回什么。 dAngle 似乎在 $(-2\pi,2\pi)$ 范围内,在这种情况下,您可以使用 if 语句执行此操作:

如果 dAngle < - PI:挂起+= 2PI

elseif dAngle > PI: 挂起 - = 2PI

万一

2
2022-06-07 14:54:23
资源