• Advertisement
Sign in to follow this  

Trouble with 2D speed vectoring.

This topic is 1899 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

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?

Share this post


Link to post
Share on other sites
Advertisement
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().

Share this post


Link to post
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.

[edit]

Aaaaaand ninja'd Edited by Cornstalks

Share this post


Link to post
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.

Share this post


Link to post
Share on other sites
Sign in to follow this  

  • Advertisement