#include < stdio.h > #include < math.h > #define M_PI 3.141 #define PI180 (M_PI/180) #define DEG2RAD(x) (x * PI180) float getShortAngle(float a1, float a2) { float angle = fabsf(a1 - a2); if(angle > DEG2RAD(180.0f)) angle = DEG2RAD(360.0f) - angle; return angle; } float lerp(float a, float b, float f) { return a + f * (b - a); } void main() { float angle1 = DEG2RAD(270), angle2 = DEG2RAD(45), result = 0; float lerpgle = 0; // lerp angle! float step = 0.1f; result = getShortAngle(angle1, angle2); printf ("Difference between %02f and %02f is %02f\n", angle1, angle2, result); printf ("Lerping between %02f and %02f in 0.1 degree steps\n", angle1, angle2); getchar(); // Test for going past 360 if (fabsf(angle1-angle2) > DEG2RAD(180.0f)) { // lerp up to 360 for (float i = 0; i < 1; i+=step) { lerpgle = lerp(angle1, DEG2RAD(359), i); printf ("> Lerp angle = %02f\n", lerpgle); } // lerp from 0 to remainder for (float i = 0; i < 1; i+=step) { lerpgle = lerp(0, angle2, i); printf (">> Lerp angle = %02f\n", lerpgle); } } else for (float i = 0; i < 1; i+=step) { lerpgle = lerp(angle1, angle2, i); printf ("Lerp angle = %02f\n", lerpgle); } printf("Complete!\n"); }
LERP between angles in radians
– March 16, 2011Posted in:

