svn merge -r37793:37865 https://svn.blender.org/svnroot/bf-blender/trunk/blender
[blender.git] / source / blender / blenlib / intern / math_geom.c
index 260e91a3b4e9c0fe73f6b6bb14477b41c2808bf6..9d945e9baa30268695f4d77871324c909658fcd6 100644 (file)
@@ -37,8 +37,6 @@
 #include "BLI_memarena.h"
 #include "BLI_utildefines.h"
 
-static float lambda_cp_line(const float p[3], const float l1[3], const float l2[3]);
-
 /********************************** Polygons *********************************/
 
 void cent_tri_v3(float cent[3], const float v1[3], const float v2[3], const float v3[3])
@@ -432,7 +430,7 @@ int isect_line_sphere_v2(const float l1[2], const float l2[2],
            l2[1] - l1[1]
        };
 
-       const float a= dot_v2v2(ldir, ldir);
+       const float a= dot_v3v3(ldir, ldir);
 
        const float b= 2.0f *
                (ldir[0] * (l1[0] - sp[0]) +
@@ -795,7 +793,7 @@ int isect_line_plane_v3(float out[3], const float l1[3], const float l2[3], cons
 
                add_v3_v3v3(l1_plane, l1, p_no);
 
-               dist = lambda_cp_line(plane_co, l1, l1_plane);
+               dist = line_point_factor_v3(plane_co, l1, l1_plane);
 
                /* treat line like a ray, when 'no_flip' is set */
                if(no_flip && dist < 0.0f) {
@@ -1245,7 +1243,7 @@ float closest_to_line_v2(float cp[2],const float p[2], const float l1[2], const
 }
 
 /* little sister we only need to know lambda */
-static float lambda_cp_line(const float p[3], const float l1[3], const float l2[3])
+float line_point_factor_v3(const float p[3], const float l1[3], const float l2[3])
 {
        float h[3],u[3];
        sub_v3_v3v3(u, l2, l1);
@@ -1253,6 +1251,14 @@ static float lambda_cp_line(const float p[3], const float l1[3], const float l2[
        return(dot_v3v3(u,h)/dot_v3v3(u,u));
 }
 
+float line_point_factor_v2(const float p[2], const float l1[2], const float l2[2])
+{
+       float h[2], u[2];
+       sub_v2_v2v2(u, l2, l1);
+       sub_v2_v2v2(h, p, l1);
+       return(dot_v2v2(u, h)/dot_v2v2(u, u));
+}
+
 /* Similar to LineIntersectsTriangleUV, except it operates on a quad and in 2d, assumes point is in quad */
 void isect_point_quad_uv_v2(const float v0[2], const float v1[2], const float v2[2], const float v3[2], const float pt[2], float *uv)
 {