|
|||||||||||||
Since GNU treats inline functions slightly differently to CW the 1st thing to note is that if you are using GNU change the line in trig.h that reads
//#define GNU_C
to
#define GNU_C
the makefile is for the GNU C trigtest
program
the trig.mcp file is for the CW trigtest program
The angles are defined as positive integers
0-4095 clockwise from due north
0 degrees = 0 PSX units
90 degrees = 1024 PSX units
180 degrees = 2048 PSX units
270 degrees = 3096 PSX units (same as -90 degrees)
360 degrees = 4096 PSX units
The function values are in 12bit fixed
point. so
1.0 = 4096 (this is #defined in libps.h as ONE)
0.5 = 2048
etc.
For more info on fixed point maths go to Rob Harveys site.
| Conversion | |
| int Deg2PSX(int DegAngle) | - converts from angle in degrees to angle in PSX. Returns angle in PSX units |
| int PSX2Deg(int PSXAngle) | - converts from angle in PSX units to angle in degrees. Returns angle in degrees |
| PSX unit functions | |
| int TanP(int PSXAngle) | - returns Tan of PSX angle. Return Value is 12 bit fixed point |
| int SinP(int PSXAngle) | - returns Sin of PSX angle. Return Value is 12 bit fixed point |
| int CosP(int PSXAngle) | - returns Cos of PSX angle. Return Value is 12 bit fixed point |
| int ATanP(int X) | - returns Atan of X (X is in 12 bit fixed point, angle returned in PSX units) |
| int ASinP(int X) | - returns Asin of X (X is in 12 bit fixed point, angle returned in PSX units) |
| int ACosP(int X) | - returns Acos of X (X is in 12 bit fixed point, angle returned in PSX units) |
| Degree functions | |
| int TanD(int DegAngle) | - returns Tan of angle. Return Value is 12 bit fixed point |
| int SinD(int DegAngle) | - returns Sin of angle. Return Value is 12 bit fixed point |
| int CosD(int DegAngle) | - returns Cos of angle. Return Value is 12 bit fixed point |
| int ATanD(int X) | - returns Atan of X (X is in 12 bit fixed point, angle returned in degrees) |
| int ASinD(int X) | - returns Asin of X (X is in 12 bit fixed point, angle returned in degrees) |
| int ACosD(int X) | - returns Acos of X (X is in 12 bit fixed point, angle returned in degrees) |
| Misc | |
| u_long ISqrt(u_long X) | - returns integer square root of X |
| void TrigTest(void) | - tests all of the above functions |
to find the angle A of the above triangle
val=(dx*4096)/dy; val=(dx*ONE)/dy // alternatively for better readability use ONE A=ATanP(val); // A is angle in PSX units A=ATanD(val); // A is angle in degrees
Similarly knowing the angle A and length dy
find dx
A in degrees
val=TanD(A); dx=(val*dy)/ONE;
A in PSX units
val=TanP(A); dx=(val*dy)/ONE;
|