]> granicus.if.org Git - poly2tri-c/commitdiff
Fix the cocentric shell split point algorithm to be more accurate and make the refine...
authorBarak Itkin <lightningismyname@gmail.com>
Sat, 12 May 2012 19:26:55 +0000 (22:26 +0300)
committerBarak Itkin <lightningismyname@gmail.com>
Sat, 12 May 2012 19:26:55 +0000 (22:26 +0300)
refine/Makefile.am
refine/cdt.c
refine/delaunay-terminator.c
refine/refine.h
refine/rmath.c [moved from refine/math.c with 96% similarity]
refine/rmath.h [moved from refine/math.h with 100% similarity]
refine/triangle.c
refine/triangle.h

index a087eb891e71a907761b608b283b9898f071f994..1fc044e2d9c9f50a65c4c4c2100a631a12b7a261 100644 (file)
@@ -1,3 +1,3 @@
 lib_LTLIBRARIES = libp2tc-refine.la
 
-libp2tc_refine_la_SOURCES = bounded-line.c bounded-line.h cdt.c cdt.h circle.c circle.h cluster.c cluster.h delaunay-terminator.c delaunay-terminator.h edge.c edge.h line.c line.h math.c math.h mesh.c mesh.h point.c point.h pslg.c pslg.h refine.h triangle.c triangle.h triangulation.h utils.c utils.h vector2.c vector2.h visibility.c visibility.h
+libp2tc_refine_la_SOURCES = bounded-line.c bounded-line.h cdt.c cdt.h circle.c circle.h cluster.c cluster.h delaunay-terminator.c delaunay-terminator.h edge.c edge.h line.c line.h rmath.c rmath.h mesh.c mesh.h point.c point.h pslg.c pslg.h refine.h triangle.c triangle.h triangulation.h utils.c utils.h vector2.c vector2.h visibility.c visibility.h
index feec2fdc99ccce6e903f371740f4317d888a802d..71ca0768659974b5991cbb78e610e7c93598a29e 100644 (file)
@@ -474,7 +474,7 @@ p2tr_cdt_flip_fix (P2trCDT *self,
           opposite = p2tr_triangle_get_opposite_point (e->mirror->tri, e->mirror);
           if (! p2tr_circle_test_point_outside(&circum_circle, &opposite->c))
             {
-              P2trEdge *flipped;
+              P2trEdge *flipped = NULL;
               if (p2tr_cdt_try_flip (self, e, &tris_to_fix, &flipped))
                 {
                   g_queue_push_tail (&flipped_edges, flipped);
index a455ea4f89305016bd4dd9b7e623b36ce0911863..e7a9df2eb9bb9670bf310fc6aca1c05424396bea 100644 (file)
@@ -3,7 +3,7 @@
 #include <glib.h>
 
 #include "utils.h"
-#include "math.h"
+#include "rmath.h"
 
 #include "point.h"
 #include "edge.h"
@@ -407,7 +407,11 @@ static void
 ChooseSplitVertex(P2trEdge *e, P2trVector2 *dst)
 {
   gdouble sourceLength = p2tr_edge_get_length(e);
-  gdouble newLength = pow(2, round(LOG2(sourceLength)));
+  gdouble newLengthFloor = pow(2, floor(LOG2(sourceLength)));
+  gdouble newLengthCeil = newLengthFloor * 2;
+  gdouble newLength =
+      (sourceLength - newLengthFloor < newLengthCeil - sourceLength)
+      ? newLengthFloor : newLengthCeil;
   gdouble ratio, resultLength;
   
   /* IMPORTANT! DIVIDE BY 2! */
index 038ef0db18ea2baf087293bacd25c1f78bdc4e80..9759ce82a8c55e0c37a6fe2b2ef96839118b7048 100644 (file)
@@ -2,7 +2,7 @@
 #define __P2TC_REFINE_H__
 
 #include "utils.h"
-#include "math.h"
+#include "rmath.h"
 
 #include "vector2.h"
 #include "circle.h"
@@ -19,4 +19,4 @@
 #include "cdt.h"
 #include "delaunay-terminator.h"
 
-#endif
\ No newline at end of file
+#endif
similarity index 96%
rename from refine/math.c
rename to refine/rmath.c
index fc6a1560cc15c9d648df57ec326217dc4be1c234..0edf6d6b60e5e6c0211f69b85921158eeff8d03b 100644 (file)
@@ -1,6 +1,6 @@
 #include <math.h>\r
 #include <glib.h>\r
-#include "math.h"\r
+#include "rmath.h"\r
 \r
 gdouble\r
 p2tr_math_length_sq (gdouble x1, gdouble y1,\r
similarity index 100%
rename from refine/math.h
rename to refine/rmath.h
index 599b969719f8beade3ffcc49fa1b27e1f8a54cf1..ae231b58f3dd46f9077c398181ea7638a101ea02 100644 (file)
@@ -2,7 +2,7 @@
 #include <glib.h>
 
 #include "utils.h"
-#include "math.h"
+#include "rmath.h"
 
 #include "point.h"
 #include "edge.h"
@@ -249,4 +249,4 @@ p2tr_triangle_contains_point2 (P2trTriangle      *self,
       &P2TR_TRIANGLE_GET_POINT(self,1)->c,
       &P2TR_TRIANGLE_GET_POINT(self,2)->c,
       pt, u, v);
-}
\ No newline at end of file
+}
index dfd54ca694ef279eaeacff52c55725b4b3b1fbcd..048c1aee32b592cc301485eda04c4d6ad7b6097c 100644 (file)
@@ -2,7 +2,7 @@
 #define __P2TC_REFINE_TRIANGLE_H__
 
 #include <glib.h>
-#include "math.h"
+#include "rmath.h"
 #include "triangulation.h"
 
 /**
@@ -58,4 +58,4 @@ P2trInTriangle p2tr_triangle_contains_point2 (P2trTriangle      *self,
                                               gdouble           *v);
 
 #define P2TR_TRIANGLE_GET_POINT(tr,index) ((tr)->edges[((index)+3-1)%3]->end)
-#endif
\ No newline at end of file
+#endif