1
$\begingroup$

Angle A is a Euler angle that keeps increasing by increments and Angle B is the stopping point of Angle A (think 'Spin-the-bottle' where Angle A is the current angle of the bottle Angle B is the angle needed to point to your crush and the bottle spins at a fixed rate clock-wise). To do this, I've been trying to compare Angle A and Angle B with inequalities. If Angle A is 60 degrees and Angle B is 80 degrees, this is no problem. If Angle A is 350 degrees and Angle B is 10 degrees however, the inequality thinks that Angle A has crossed Angle B even though it hasn't. How do I compare angles when they wraparound at 360 degrees?

This is some pseudocode for what I have so far:

int AngleB = 30;

int AngleA = 300;

void Update() {

AngleA += 13;

if (AngleA > AngleB) {

AngleA = AngleB;

}

}

$\endgroup$
0
$\begingroup$

Here's a kind of generic solution:

while (a < (b-180)) {
   a = a + 360;
}
a = a - 360;
while ((b-180) > a) {
   b = b - 360;
}
b = b + 360

If you run this, you'll end up with an angle $a$, and an angle $b$ that's numerically greater than $a$, but not by more than 360. It's not very efficient code if $a$ and $b$ differ by $100,000$ degrees, for instance, but for the cases you care about, it works surprisingly well in practice.

What do you do with these values? Well, you might say that if $b$ is more than 180 degrees above $a$, then $a$ is greater than $b$, but if $b$ is less than 180 degrees more than $a$, then $b$ is greater than $a$. if $b - a = 180$, all bets are off. :)

$\endgroup$
  • $\begingroup$ Thanks :) Now I can compare my angles! $\endgroup$ – JPtheK9 Jan 5 '15 at 23:22
  • $\begingroup$ I made a minor modification to your method and got it working. Instead of while (a < b), I did while (a < (b - 180)) and the reverse for the other comparison. $\endgroup$ – JPtheK9 Jan 5 '15 at 23:44
  • $\begingroup$ I've incorporated that into the code. $\endgroup$ – John Hughes Jan 6 '15 at 0:19

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.