]> git.tdb.fi Git - libs/gl.git/commitdiff
Fix axis interpolation to work with scaling
authorMikko Rasa <tdb@tdb.fi>
Thu, 11 Apr 2013 19:34:15 +0000 (22:34 +0300)
committerMikko Rasa <tdb@tdb.fi>
Thu, 11 Apr 2013 19:34:15 +0000 (22:34 +0300)
source/animation.cpp

index 1aa8242aca1eca403d10e3cb33a6f9d9fd8d1bc6..8135cb5995a406e5f9b722f5ca242b3c60eecb96 100644 (file)
@@ -59,18 +59,17 @@ Animation::AxisInterpolation::AxisInterpolation(const double *axis1, const doubl
 {
        // Compute a normalized vector halfway between the two endpoints
        double half[3];
-       double len = 0;
+       double a1_len = 0;
+       double h_len = 0;
        for(unsigned i=0; i<3; ++i)
        {
                half[i] = (axis1[i]+axis2[i])/2;
-               len += half[i]*half[i];
+               a1_len += axis1[i]*axis1[i];
+               h_len += half[i]*half[i];
        }
-       len = sqrt(len);
-       for(unsigned i=0; i<3; ++i)
-               half[i] /= len;
 
        // Compute correction factors for smooth interpolation
-       double cos_half = axis1[0]*half[0]+axis1[1]*half[1]+axis1[2]*half[2];
+       double cos_half = (axis1[0]*half[0]+axis1[1]*half[1]+axis1[2]*half[2])/sqrt(a1_len*h_len);
        double angle = acos(cos_half);
        slope = (angle ? angle/tan(angle) : 1);
        scale = cos_half;