Angle Calculation
From FSG Wiki
Contents |
[edit]
Calulate an angle based on the cursor
REMOVETRIGGER GET_ANGLE ON GET_ANGLE SET tmpX ($0 - X) ON GET_ANGLE SET tmpY ($1 - Y) ON GET_ANGLE SET tmp (SQRT ((tmpX * tmpX) + (tmpY * tmpY)))
[edit]
Calulate an angle based on a given coordinate
REMOVETRIGGER GET_ANGLE2 ON GET_ANGLE2 SET tmpX ($0 - $2) ON GET_ANGLE2 SET tmpY ($1 - $3) ON GET_ANGLE2 SET tmp (SQRT ((tmpX * tmpX) + (tmpY * tmpY)))
[edit]
How it work
OK the two function are very similar.
You can use only the second one providing each time the starting x,y and the ending x,y.
So let's just focus on the second one.
[edit]
Line 1
ON GET_ANGLE2 SET tmpX ($0 - $2)
This line is used to get the difference between the EndingX and the StartingX.
[edit]
Line 2
ON GET_ANGLE2 SET tmpY ($1 - $3)
This line is the same as the previous one, but for the Y.
[edit]
Line 3
ON GET_ANGLE2 SET tmp (SQRT ((tmpX * tmpX) + (tmpY * tmpY)))
This line is used to calculate the hypothenuse.
[edit]
Example
[edit]
New Syntax Angle Function
TRIGGER GETANGLE {
tmpX = ($0 - $2)
tmpY = ($1 - $3)
tmp = (SQRT ((tmpX * tmpX) + (tmpY * tmpY)))
}
[edit]
FULL 360 ANGLE FUNCTION
ELEMENT none Laser 255 0 0 0 1 0 1 100% Clear 100 TEXT none
// $0=X $1=Y [$2=StartingX, $3=StartingY]
TRIGGER GETANGLE {
tmp = -1
AngleFOUND = -1
EXEC GetLEN $0 $1 $2 $3
WHILE ((tmp <= 90) && (AngleFOUND == -1)) GETANGLE2 AngleCOS 1
tmp = -1
WHILE ((tmp <= 90) && (AngleFOUND == -1)) GETANGLE2 AngleCOS 5
tmp = -1
WHILE ((tmp <= 90) && (AngleFOUND == -1)) GETANGLE2 AngleCOS 10
tmp = -1
WHILE ((tmp <= 90) && (AngleFOUND == -1)) GETANGLE2 AngleCOS 20
}
// $0=Angle $1=Precision (1=MORE PRECISE ... 25=LESS PRECISE)
TRIGGER GETANGLE2 {
tmp = (tmp + 1)
tmpX = (SIN (tmp * 1000))
tmpDIFF = (tmpX - $0)
IF (tmpDIFF < 0) <SET tmpDIFF (tmpDIFF * -1)>
IF ((tmpDIFF <= $1) && (Quadrant == 0)) <SET AngleFOUND (180 + (90 - tmp))>
IF ((tmpDIFF <= $1) && (Quadrant == 1)) <SET AngleFOUND (180 - (90 - tmp))>
IF ((tmpDIFF <= $1) && (Quadrant == 2)) <SET AngleFOUND (90 - tmp)>
IF ((tmpDIFF <= $1) && (Quadrant == 3)) <SET AngleFOUND (360 - (90 - tmp))>
IF (AngleFOUND != -1) <SET TrueANGLE AngleFOUND>
}
// $0=X1 $1=Y1 [$2=StartingX, $3=StartingY]
TRIGGER GetLEN {
LenX = ($0 - $2)
LenY = ($1 - $3)
IF (LenX < 0) <SET NegX -1>
IF (LenX > 0) <SET NegX 1>
IF (LenX < 0) <SET LenX (LenX * -1)>
IF (LenY < 0) <SET NegY -1>
IF (LenY > 0) <SET NegY 1>
IF (LenY < 0) <SET LenY (LenY * -1)>
IF ((NegX == -1) && (NegY == -1)) <SET Quadrant 0>
IF ((NegX == 1) && (NegY == -1)) <SET Quadrant 1>
IF ((NegX == 1) && (NegY == 1)) <SET Quadrant 2>
IF ((NegX == -1) && (NegY == 1)) <SET Quadrant 3>
LenH = (SQRT ((LenX * LenX) + (LenY * LenY)))
AngleCOS = ((LenY * 1000) / LenH)
}
TRIGGER Newstatus {
EXEC GETANGLE X Y 210 210
STATUS CLEAR
STATUS ADDTEXT "FPS ("
STATUS ADDNUMBER FPS
STATUS ADDTEXT ") LenX,Y=("
STATUS ADDNUMBER LenX
STATUS ADDTEXT ","
STATUS ADDNUMBER LenY
STATUS ADDTEXT ") ANGLE="
STATUS ADDNUMBER AngleFOUND
STATUS ADDTEXT "°"
DRAW ELEMENT:Clear FILLEDRECT 0 0 WIDTH HEIGHT
DRAW ELEMENT:Laser LINE 210 210 ((210 - X) * -1) ((210 - Y) * -1)
WRITE ELEMENT:Earth 100 100 20 NUMBER NegX
WRITE ELEMENT:Earth 100 120 20 NUMBER NegY
TIMER 1 FRAMES Newstatus
}
statustype = 1
EXEC defaultstatus
EXEC Newstatus

