Tools:
[blender-staging.git] / intern / boolop / intern / BOP_MathUtils.cpp
index 00c9515a4863baa4cee40147e12836add86ce589..251bbb9e138cbeb8f989b0c45dd3922b06e9c750 100644 (file)
@@ -1,4 +1,7 @@
 /**
 /**
+ *
+ * $Id$
+ *
  * ***** BEGIN GPL/BL DUAL LICENSE BLOCK *****
  *
  * This program is free software; you can redistribute it and/or
  * ***** BEGIN GPL/BL DUAL LICENSE BLOCK *****
  *
  * This program is free software; you can redistribute it and/or
@@ -23,7 +26,7 @@
  *
  * The Original Code is: all of this file.
  *
  *
  * The Original Code is: all of this file.
  *
- * Contributor(s): none yet.
+ * Contributor(s): Marc Freixas, Ken Hughes
  *
  * ***** END GPL/BL DUAL LICENSE BLOCK *****
  */
  *
  * ***** END GPL/BL DUAL LICENSE BLOCK *****
  */
@@ -115,7 +118,12 @@ bool BOP_collinear(const MT_Point3& p1, const MT_Point3& p2, const MT_Point3& p3
 {
        MT_Vector3 v1 = p2 - p1;
        MT_Vector3 v2 = p3 - p2;
 {
        MT_Vector3 v1 = p2 - p1;
        MT_Vector3 v2 = p3 - p2;
-       
+
+       /* normalize vectors before taking their cross product, so its length 
+     * has some actual meaning */
+       v1.normalize(); 
+       v2.normalize();
+
        MT_Vector3 w = v1.cross(v2);
        
        return (BOP_comp(w.x(),0.0) == 0) && (BOP_comp(w.y(),0.0) == 0) && (BOP_comp(w.z(),0.0) == 0);
        MT_Vector3 w = v1.cross(v2);
        
        return (BOP_comp(w.x(),0.0) == 0) && (BOP_comp(w.y(),0.0) == 0) && (BOP_comp(w.z(),0.0) == 0);
@@ -338,7 +346,7 @@ MT_Point3 BOP_intersectPlane(const MT_Plane3& plane, const MT_Point3& p1, const
        //
        //       coefA*((p2.x - p1.y)*lambda + p1.x) + ... + coefD = 0
        
        //
        //       coefA*((p2.x - p1.y)*lambda + p1.x) + ... + coefD = 0
        
-    MT_Point3 intersection;
+    MT_Point3 intersection = MT_Point3(0,0,0); //never ever return anything undefined! 
     MT_Scalar den = plane.x()*(p2.x()-p1.x()) + 
                                        plane.y()*(p2.y()-p1.y()) + 
                                        plane.z()*(p2.z()-p1.z());
     MT_Scalar den = plane.x()*(p2.x()-p1.x()) + 
                                        plane.y()*(p2.y()-p1.y()) + 
                                        plane.z()*(p2.z()-p1.z());