I have an alternate ineresting way of moving in circles. It's based on dynamic equations of harmonic oscillators movements. It has its benfits and drawbacks though, here it is:

move_init:

radius = 100;

omega = 2*PI/120; // let's say you want to make a complete turn in 120 frames

omega2 = omega*omega;

posx = -radius;

posy = 0;

speedx = 0;

speedy = radius*omega;

move_loop:

speedx += -omega2*posx;

speedy += -omega2*posy;

posx +=speedx;

posy +=speedy;

spritepos=(posx, posy);

goto move_loop;

As you see, the main benefit is NO sin() call, NO sin precalculation Table. If you replace omega by a power of 2, then you can avoid the 2 muls in the loop too, wich makes the method Zero-Mul Zero-Call Zero-Table. I find that 4 Adds to get a circle is quiet fun.

To make it work you need to have posx, posy, speedx, speedy declared as floating point, OR fixed point with "enough" precision.

Notice that the lower omega value is, the better is the circle shape accuracy.

Notice also that -omega*posx added to the speed on each frame is the expression of a spring force. You can add here other forces at will (friction, gravity or whatever).

Blitz code :

Const width=800

Const height=600

Graphics width,height

SetBuffer BackBuffer()

radius# = 200

omega# = 2*Pi/120

omega2# = omega*omega

posx# = -radius

posy# = 0

speedx# = 0

speedy# = radius*omega

While Not KeyDown(1)

speedx = speedx - omega2*posx

speedy = speedy - omega2*posy

posx = posx + speedx

posy = posy + speedy

Plot posx+400,posy+300

Flip

Wend

End