[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [49311] trunk/blender/intern/iksolver/ intern: IK's were converting double -> float -> double's in a few places, since precision is important and doubles are used a lot here anyway.

Campbell Barton ideasman42 at gmail.com
Sat Jul 28 00:27:08 CEST 2012


Revision: 49311
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=49311
Author:   campbellbarton
Date:     2012-07-27 22:27:06 +0000 (Fri, 27 Jul 2012)
Log Message:
-----------
IK's were converting double -> float -> double's in a few places, since precision is important and doubles are used a lot here anyway. just use doubles, also quiet some double promotion warnings.

Modified Paths:
--------------
    trunk/blender/intern/iksolver/intern/IK_QJacobianSolver.cpp
    trunk/blender/intern/iksolver/intern/IK_QJacobianSolver.h
    trunk/blender/intern/iksolver/intern/IK_QSegment.cpp
    trunk/blender/intern/iksolver/intern/IK_QSegment.h
    trunk/blender/intern/iksolver/intern/IK_QTask.h
    trunk/blender/intern/iksolver/intern/IK_Solver.cpp

Modified: trunk/blender/intern/iksolver/intern/IK_QJacobianSolver.cpp
===================================================================
--- trunk/blender/intern/iksolver/intern/IK_QJacobianSolver.cpp	2012-07-27 22:16:12 UTC (rev 49310)
+++ trunk/blender/intern/iksolver/intern/IK_QJacobianSolver.cpp	2012-07-27 22:27:06 UTC (rev 49311)
@@ -46,18 +46,18 @@
 MT_Scalar IK_QJacobianSolver::ComputeScale()
 {
 	std::vector<IK_QSegment*>::iterator seg;
-	float length = 0.0f;
+	MT_Scalar length = 0.0f;
 
 	for (seg = m_segments.begin(); seg != m_segments.end(); seg++)
 		length += (*seg)->MaxExtension();
 	
-	if(length == 0.0f)
-		return 1.0f;
+	if(length == 0.0)
+		return 1.0;
 	else
-		return 1.0f/length;
+		return 1.0 / length;
 }
 
-void IK_QJacobianSolver::Scale(float scale, std::list<IK_QTask*>& tasks)
+void IK_QJacobianSolver::Scale(MT_Scalar scale, std::list<IK_QTask*>& tasks)
 {
 	std::list<IK_QTask*>::iterator task;
 	std::vector<IK_QSegment*>::iterator seg;
@@ -172,8 +172,8 @@
 static MT_Scalar safe_acos(MT_Scalar f)
 {
 	// acos that does not return NaN with rounding errors
-	if (f <= -1.0f) return MT_PI;
-	else if (f >= 1.0f) return 0.0;
+	if (f <= -1.0) return MT_PI;
+	else if (f >= 1.0) return 0.0;
 	else return acos(f);
 }
 
@@ -245,7 +245,7 @@
 		// we compute the pole angle that to rotate towards the target
 		m_poleangle = angle(mat[1], polemat[1]);
 
-		if(rootz.dot(mat[1]*cos(m_poleangle) + mat[0]*sin(m_poleangle)) > 0.0f)
+		if(rootz.dot(mat[1]*cos(m_poleangle) + mat[0]*sin(m_poleangle)) > 0.0)
 			m_poleangle = -m_poleangle;
 
 		// solve again, with the pole angle we just computed

Modified: trunk/blender/intern/iksolver/intern/IK_QJacobianSolver.h
===================================================================
--- trunk/blender/intern/iksolver/intern/IK_QJacobianSolver.h	2012-07-27 22:16:12 UTC (rev 49310)
+++ trunk/blender/intern/iksolver/intern/IK_QJacobianSolver.h	2012-07-27 22:27:06 UTC (rev 49311)
@@ -77,7 +77,7 @@
 	void ConstrainPoleVector(IK_QSegment *root, std::list<IK_QTask*>& tasks);
 
 	MT_Scalar ComputeScale();
-	void Scale(float scale, std::list<IK_QTask*>& tasks);
+	void Scale(MT_Scalar scale, std::list<IK_QTask*>& tasks);
 
 private:
 

Modified: trunk/blender/intern/iksolver/intern/IK_QSegment.cpp
===================================================================
--- trunk/blender/intern/iksolver/intern/IK_QSegment.cpp	2012-07-27 22:16:12 UTC (rev 49310)
+++ trunk/blender/intern/iksolver/intern/IK_QSegment.cpp	2012-07-27 22:27:06 UTC (rev 49311)
@@ -75,9 +75,9 @@
 
 static MT_Scalar safe_acos(MT_Scalar f)
 {
-	if (f <= -1.0f)
+	if (f <= -1.0)
 		return MT_PI;
-	else if (f >= 1.0f)
+	else if (f >= 1.0)
 		return 0.0;
 	else
 		return acos(f);
@@ -345,7 +345,7 @@
 	m_basis = m_rest_basis.inverse() * mat * m_rest_basis * m_basis;
 }
 
-void IK_QSegment::Scale(float scale)
+void IK_QSegment::Scale(MT_Scalar scale)
 {
 	m_start *= scale;
 	m_translation *= scale;
@@ -1035,7 +1035,7 @@
 	m_limit[axis]= true;
 }
 
-void IK_QTranslateSegment::Scale(float scale)
+void IK_QTranslateSegment::Scale(MT_Scalar scale)
 {
 	int i;
 

Modified: trunk/blender/intern/iksolver/intern/IK_QSegment.h
===================================================================
--- trunk/blender/intern/iksolver/intern/IK_QSegment.h	2012-07-27 22:16:12 UTC (rev 49310)
+++ trunk/blender/intern/iksolver/intern/IK_QSegment.h	2012-07-27 22:27:06 UTC (rev 49311)
@@ -170,7 +170,7 @@
 	void Reset();
 
 	// scale
-	virtual void Scale(float scale);
+	virtual void Scale(MT_Scalar scale);
 
 protected:
 
@@ -338,7 +338,7 @@
 	void SetWeight(int axis, MT_Scalar weight);
 	void SetLimit(int axis, MT_Scalar lmin, MT_Scalar lmax);
 
-	void Scale(float scale);
+	void Scale(MT_Scalar scale);
 
 private:
 	int m_axis[3];

Modified: trunk/blender/intern/iksolver/intern/IK_QTask.h
===================================================================
--- trunk/blender/intern/iksolver/intern/IK_QTask.h	2012-07-27 22:16:12 UTC (rev 49310)
+++ trunk/blender/intern/iksolver/intern/IK_QTask.h	2012-07-27 22:27:06 UTC (rev 49311)
@@ -78,7 +78,7 @@
 
 	virtual bool PositionTask() const { return false; }
 
-	virtual void Scale(float) {}
+	virtual void Scale(MT_Scalar) {}
 
 protected:
 	int m_id;
@@ -103,7 +103,7 @@
 	MT_Scalar Distance() const;
 
 	bool PositionTask() const { return true; }
-	void Scale(float scale) { m_goal *= scale; m_clamp_length *= scale; }
+	void Scale(MT_Scalar scale) { m_goal *= scale; m_clamp_length *= scale; }
 
 private:
 	MT_Vector3 m_goal;
@@ -141,7 +141,7 @@
 
 	MT_Scalar Distance() const;
 
-	void Scale(float scale) { m_goal_center *= scale; m_distance *= scale; }
+	void Scale(MT_Scalar scale) { m_goal_center *= scale; m_distance *= scale; }
 
 private:
 	MT_Scalar ComputeTotalMass(const IK_QSegment *segment);

Modified: trunk/blender/intern/iksolver/intern/IK_Solver.cpp
===================================================================
--- trunk/blender/intern/iksolver/intern/IK_Solver.cpp	2012-07-27 22:16:12 UTC (rev 49310)
+++ trunk/blender/intern/iksolver/intern/IK_Solver.cpp	2012-07-27 22:27:06 UTC (rev 49311)
@@ -197,14 +197,14 @@
 
 void IK_SetStiffness(IK_Segment *seg, IK_SegmentAxis axis, float stiffness)
 {
-	if (stiffness < 0.0)
+	if (stiffness < 0.0f)
 		return;
 	
-	if (stiffness > 0.999)
-		stiffness = 0.999;
+	if (stiffness > 0.999f)
+		stiffness = 0.999f;
 
 	IK_QSegment *qseg = (IK_QSegment*)seg;
-	MT_Scalar weight = 1.0-stiffness;
+	MT_Scalar weight = 1.0f - stiffness;
 
 	if (axis >= IK_TRANS_X) {
 		if(!qseg->Translational()) {




More information about the Bf-blender-cvs mailing list