[gameprogrammer] Re: Diff Between 2 Angles

On Friday 30 September 2005 10:08, Olof Bjarnason wrote:
> double absanglediff(double angle1, double angle2) {
>   // Rotate angle1 with angle2 so that the sought after
>   // angle is between the resulting angle and the x-axis
>   angle1 -= angle2;
>
>   // "Normalize" angle1 to range [-180,180)
>   while(angle1 < -180)
>     angle1 += 360;
>   while(angle1 >= 180)

small improvment is to left out the equal sign.
after all abs(180-360) == abs(180)

>     angle1 -= 360;
>
>   // angle1 has the signed answer, just "unsign it"
>   return abs(angle1);
> }
>
> /Olof
>
> On 9/29/05, Simon <simonmihevc@xxxxxxxx> wrote:
> > > I've got a really simple problem that I'm almost ashamed to ask
> > > about! I've written a 3D pseudo-realtime strategy game called
> > > Lazer Squad 3D (www.carlylesmith.karoo.net/lazersquad3d/).  One
> > > problem I always think I've solved, but then comes back to bite
> > > me, is how to get the difference between two angles.  This seems
> > > easy on the face of it, but then along comes two angles and my
> > > formula gets it all wrong.  (This is degrees, BTW, not rads).
> > >
> > > The main problem is when dealing with negative angles, angles >
> > > 360, and also getting the shortest distance (i.e. not the long
> > > way round).  For example, the difference between -359 and 359
> > > should be 2 degrees.  The difference between 90 and -270 should
> > > be zero.  Etc.. etc.. Can anyone help please?
> > >
> > > Thanks in advance,
> > >
> > > Steve Smith
> >
> > Maybe try it like this:
> >
> > // convert angles to positive
> > while (angle1 < 0) angle1 += 360;
> > while (angle2 < 0) angle2 += 360;
> >
> > // clamp angles betwen 0 and 360
> > angle1 = angle1 % 360;
> > angle2 = angle2 % 360;
> >
> > // compute angle difference
> > angle_dif = abs(angle1 - angle2)
> >
> > // find the smaller angle
> > if (one_angle_dif > 180) angle_dif = 360 - angle_dif;
> >
> > Cheers, Simon.
> >
> >
> > ---------------------
> > To unsubscribe go to http://gameprogrammer.com/mailinglist.html
>
> ---------------------
> To unsubscribe go to http://gameprogrammer.com/mailinglist.html


---------------------
To unsubscribe go to http://gameprogrammer.com/mailinglist.html


Other related posts: