Followers 0

# Trouble with 2D speed vectoring.

## 3 posts in this topic

So I'm working on a 2D, top-down racer-ish game and I devised an interesting algorithm using cosines and angles to calculate the speed vector. Too bad for me, it doesn't work like it's supposed to.

[CODE]
if( Rotation > 0 && Rotation < 90 )
{
float Section_A = Speed*cos(90-Rotation);
Velocity_Y = Speed*cos(Rotation);
Velocity_X = Section_A - Section_A - Section_A;
}
else if( Rotation > 90 && Rotation < 180)
{
float Section_B = Speed*cos(180-Rotation);
float Section_C = Speed*cos(Rotation-90);
Velocity_Y = Section_B - Section_B - Section_B;
Velocity_X = Section_C - Section_C - Section_C;
}
else if( Rotation > 180 && Rotation < 270)
{
float Section_D = Speed*cos(Rotation-180);
Velocity_Y = Section_D - Section_D - Section_D;
Velocity_X = Speed*cos(270-Rotation);
}
else if( Rotation > 270 && Rotation < 360)
{
Velocity_Y = Speed*cos(360-Rotation);
Velocity_X = Speed*cos(Rotation-270);
}
else if( Rotation < 1 )
{ Velocity_Y = Speed; Velocity_X = 0; }
else if( Rotation > 89 && Rotation < 91 )
{ Velocity_Y = 0; Velocity_X = Speed - Speed - Speed; }
else if( Rotation > 179 && Rotation < 181 )
{ Velocity_Y = Speed - Speed - Speed; Velocity_X = 0; }
else if( Rotation > 269 && Rotation < 271 )
{ Velocity_Y = 0; Velocity_X = Speed; }
Position_Y = Position_Y + Velocity_Y;
Position_X = Position_X + Velocity_X;
[/CODE]

(0 rotation means the car is facing down, 90 it's facing left, 180 up, 270 right.
At >359 rotation goes insta 0.)

All that this does, is spaz out.
In my theory it should work, but apparently it does not.
Can anyone help?
0

##### Share on other sites
Wild guess: most trig functions (sin, cos, etc.) work with [i]radians[/i], not [i]degrees[/i]. Try converting your degrees to radians ([font=courier new,courier,monospace]radians = degrees * 3.14159265359f / 180.0f[/font]) before doing sin/cos.

Aaaaaand ninja'd Edited by Cornstalks
1

##### Share on other sites
[quote name='Álvaro' timestamp='1352397825' post='4998950']
I think this is all you need:
[code]double const pi = atan(1.0)*4.0;
double const degrees = pi/180.0;

Velocity_X = -Speed * sin(Rotation * degrees);
Velocity_Y = Speed * cos(Rotation * degrees);[/code]

You need to make sure your angles are in radians before you pass them to cos() or sin().
[/quote]

That works great!
Thanks man, massive kudos.
0

## Create an account

Register a new account

Followers 0

• 11
• 28
• 14
• 11
• 33