Like Alex says, angle is returned in radian with his method.
If you want to get angle in degree, write "DEG(ATAN(SY#,SX#))" instead of "ATAN(SY#,SX#)".
Angle is 0deg when stick is pointing right.
The maximum (minimum) angle is +180deg (-180deg) if you turn stick counterclockwise (clockwise) from 0deg position.
I think my English vocabulary is not enough to explain it, but I'll make efforts.
#1: When an impact is applied, rotate circle 1 around circle 2 with velocity vectors until the line connecting center of circle 1 with circle 2 overlaps X axis.
#2: Swap X components of velocity vectors of 2 circles.
#3: Restore #1 to original status.
Exactly speaking, correct Hiragana spelling of ten steps is "じっぽ".
Not only this but also "じっぷん"(ten minutes), "じっかい"(the ten commandments) and so on.
But don't worry because many Japanese also have forgotten the truth.
Could you download DS4R393 and refer to EX_KEYFLUSH?
Button status will be kept for at least 1/60sec after you release buttons. Therefore you should FLUSH button buffer every time you detect buttons.
18) When N is integer, NOT N is equal to -1-N
19) A=A+1(A=A-1) is a little bit faster than INC A(DEC A).
20) Normally the result of comparison operation (e.g. A>B) is boolean (1:TRUE/0:FALSE). However, if we compare string variable and numerical variable like A$<B, the result will be 3. We can discriminate variable type with this phenomenon.
I explain my previous post.
ITV array always stores frame to frame interval of past 60 frames.
MILLISEC system variable is integer, but usually frame to frame interval isn't integer. Therefore I find the solution as average of whole ITV array. And FPS is the reciprocal of it. "/1000" stands for msec to sec modification.
Could you refer to the following program?
DIM ITV[60]:FILL ITV,0
PTR=0:PMS=MILLISEC
'START OF LOOP
ITV[PTR]=MILLISEC-PMS
PMS=MILLISEC:PTR=(PTR+1)MOD 60:TTL=0
FOR I=0 TO 59:TTL=TTL+ITV[I]:NEXT I
IF TTL!=0 THEN FPS=60/(TTL/1000) ELSE FPS=0
LOCATE 2,2:?FORMAT$("%6.1F FPS",FPS)
'END OF LOOP