=bmesh= merge from trunk at r36529
[blender.git] / source / blender / blenlib / intern / math_vector_inline.c
index 9f6a8afe2d5792088ac4f7b76178c949de1bb49a..dc3baf1698ae04093d65603c3b7e0a9eaf29543e 100644 (file)
@@ -419,6 +419,29 @@ MINLINE float normalize_v3_v3(float r[3], const float a[3])
        return d;
 }
 
+MINLINE double normalize_dv3(double n[3])
+{
+       double d= n[0]*n[0] + n[1]*n[1] + n[2]*n[2];
+
+       /* a larger value causes normalize errors in a
+          scaled down models with camera xtreme close */
+       if(d > 1.0e-35f) {
+               double mul;
+
+               d= sqrt(d);
+               mul = 1.0 / d;
+
+               n[0] *= mul;
+               n[1] *= mul;
+               n[2] *= mul;
+       } else {
+               n[0] = n[1] = n[2] = 0;
+               d= 0.0;
+       }
+
+       return d;
+}
+
 MINLINE float normalize_v3(float n[3])
 {
        return normalize_v3_v3(n, n);