merge with/from trunk at r35190
[blender.git] / source / blender / blenlib / intern / math_vector_inline.c
index 77c2c9b74d23d90712f8f996022f0a005bda9052..52d55ab948b4daa28d0ca56b5b4cbcb2cfb375bf 100644 (file)
@@ -414,6 +414,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);