I'm currently working my head around angles in degrees and radians.

I'm trying to use 0-360 degrees system that when the double reaches a value of 0 or 360 it wraps around so lets say the angle is increased/decreased by 90.

Going from 360 + 90 = 90

Going from 0 - 90 = 270

This works when trying to move with cos and sin for the angular movement. But I realized that 0* and 360* is not the same value for sin ( cos 0 and 360 is equal to 0 ).

sin(0*) = 0

sin(360*) = -1 * 10^-13

While I realize that this number is incredible small and wouldn't make a noticeable difference, it's still a factor that can change the output of movement.

When checking a real time example of it ( Example Movement ):

y = 5

sin(0*(Pi/180) )*(-6) = 6*10^-13

sin(360*(Pi/1780) )*(-6) = 0

It's obvious that these are not the same, though the calculator and computer outputs the same number if it was supposed to add to y, say: 5 + 0 = 5 and 5 + 6*10^-13 = 5 ( Computer output and Ti-84+ Calculator ).

But when trying to compare these as equal each other in an if statement it did not validate as true, so there is a very small difference.

My current wrap-around code looks like this:

if( sf::Keyboard::isKeyPressed( sf::Keyboard::A ) ) { player.rot -= 5; if( player.rot < 0 ) { player.rot = ( 360 + player.rot ); } } if( sf::Keyboard::isKeyPressed( sf::Keyboard:<img src='http://public.gamedev.net//public/style_emoticons/<#EMO_DIR#>/biggrin.png' class='bbc_emoticon' alt=':D' /> ) ) { player.rot += 5; if( player.rot > 360 ) { player.rot = ( player.rot - 360 ); } }

So, is this going to be a problem in the future or is it so small that it's negligible? After all it's only a problem on the 0 and 360 degrees.

* Converted to radians under the hood when inserted into cos or sin functions.

**Edited by Moonkis, 28 November 2012 - 04:27 AM.**