[Bf-blender-cvs] [db8293d] master: Polyfill: minor changes to which fix rare errors with float precision

Campbell Barton noreply at git.blender.org
Thu Dec 26 02:22:30 CET 2013


Commit: db8293d4561791b4ddb349fa3ce37803afe509ee
Author: Campbell Barton
Date:   Thu Dec 26 12:21:40 2013 +1100
https://developer.blender.org/rBdb8293d4561791b4ddb349fa3ce37803afe509ee

Polyfill: minor changes to which fix rare errors with float precision

===================================================================

M	source/blender/blenlib/intern/polyfill2d.c

===================================================================

diff --git a/source/blender/blenlib/intern/polyfill2d.c b/source/blender/blenlib/intern/polyfill2d.c
index 56cd385..f5a226c 100644
--- a/source/blender/blenlib/intern/polyfill2d.c
+++ b/source/blender/blenlib/intern/polyfill2d.c
@@ -50,8 +50,6 @@
 
 #include "BLI_strict_flags.h"
 
-#define SIGN_EPS 0.000001f
-
 /* avoid fan-fill topology */
 #define USE_CLIP_EVEN
 #define USE_CONVEX_SKIP
@@ -97,7 +95,7 @@ static void         pf_ear_tip_cut(PolyFill *pf, unsigned int index_ear_tip);
 
 BLI_INLINE eSign signum_i(float a)
 {
-	if (UNLIKELY(fabsf(a) < SIGN_EPS))
+	if (UNLIKELY(a == 0.0f))
 		return  0;
 	else if (a > 0.0f)
 		return  1;
@@ -105,9 +103,23 @@ BLI_INLINE eSign signum_i(float a)
 		return -1;
 }
 
+/**
+ * alternative version of #area_tri_signed_v2
+ * needed because of float precision issues
+ *
+ * \note removes / 2 since its not needed since we only need ths sign.
+ */
+BLI_INLINE float area_tri_signed_v2_alt_2x(const float v1[2], const float v2[2], const float v3[2])
+{
+	return ((v1[0] * (v2[1] - v3[1])) +
+	        (v2[0] * (v3[1] - v1[1])) +
+	        (v3[0] * (v1[1] - v2[1])));
+}
+
+
 static eSign span_tri_v2_sign(const float v1[2], const float v2[2], const float v3[2])
 {
-	return signum_i(area_tri_signed_v2(v3, v2, v1));
+	return signum_i(area_tri_signed_v2_alt_2x(v3, v2, v1));
 }
 
 static unsigned int *pf_tri_add(PolyFill *pf)




More information about the Bf-blender-cvs mailing list