LERP between angles in radians

#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");
}

WordPress Pastebin plugin

Tags: , ,

About James

If this were the 80s I'd be sat in front of a C64 or Speccy, or taking VCRs apart.