diff options
author | pacien | 2017-12-29 00:28:58 +0100 |
---|---|---|
committer | pacien | 2017-12-29 00:28:58 +0100 |
commit | a20e595f4a5b63e613a90fab3616b59646df051f (patch) | |
tree | 4345abd7e939ebb969842ebdef5a777c19c2f027 | |
parent | 9ed3c28a0335137d34e51d5fd49be6e523f65a89 (diff) | |
download | morpher-a20e595f4a5b63e613a90fab3616b59646df051f.tar.gz |
Accept edge case as Delaunay
Signed-off-by: pacien <pacien.trangirard@pacien.net>
-rw-r--r-- | src/morpher/quadrilateral.c | 8 | ||||
-rw-r--r-- | test/morpher/quadrilateral.c | 1 |
2 files changed, 5 insertions, 4 deletions
diff --git a/src/morpher/quadrilateral.c b/src/morpher/quadrilateral.c index 9c73dfa..d5c64b0 100644 --- a/src/morpher/quadrilateral.c +++ b/src/morpher/quadrilateral.c | |||
@@ -7,12 +7,12 @@ static inline IntVector p2(IntVector n) { | |||
7 | return n * n; | 7 | return n * n; |
8 | } | 8 | } |
9 | 9 | ||
10 | static inline bool not_in_circumcircle(TriangleMap *t, CartesianVector v) { | 10 | static inline bool in_circumcircle(TriangleMap *t, CartesianVector v) { |
11 | CartesianVector a = t->vertices[0].origin, b = t->vertices[1].origin, c = t->vertices[2].origin; | 11 | CartesianVector a = t->vertices[0].origin, b = t->vertices[1].origin, c = t->vertices[2].origin; |
12 | IntVector v2 = p2(v.x) + p2(v.y); | 12 | IntVector v2 = p2(v.x) + p2(v.y); |
13 | return matrix_int_det3(a.x - v.x, a.y - v.y, p2(a.x) + p2(a.y) - v2, | 13 | return matrix_int_det3(a.x - v.x, a.y - v.y, p2(a.x) + p2(a.y) - v2, |
14 | b.x - v.x, b.y - v.y, p2(b.x) + p2(b.y) - v2, | 14 | b.x - v.x, b.y - v.y, p2(b.x) + p2(b.y) - v2, |
15 | c.x - v.x, c.y - v.y, p2(c.x) + p2(c.y) - v2) > 0; | 15 | c.x - v.x, c.y - v.y, p2(c.x) + p2(c.y) - v2) < 0; |
16 | } | 16 | } |
17 | 17 | ||
18 | static inline void rotate_vertices(TriangleMap *t1, TriangleMap *t2, int e1, int e2) { | 18 | static inline void rotate_vertices(TriangleMap *t1, TriangleMap *t2, int e1, int e2) { |
@@ -58,6 +58,6 @@ void quadrilateral_flip_diagonal(TriangleMap *t1, TriangleMap *t2) { | |||
58 | 58 | ||
59 | bool quadrilateral_is_delaunay(TriangleMap *t1, TriangleMap *t2) { | 59 | bool quadrilateral_is_delaunay(TriangleMap *t1, TriangleMap *t2) { |
60 | assert(t1 != NULL && t2 != NULL); | 60 | assert(t1 != NULL && t2 != NULL); |
61 | return not_in_circumcircle(t1, t2->vertices[(trianglemap_find_common_edge(t2, t1) + 2) % 3].origin) && | 61 | return !in_circumcircle(t1, t2->vertices[(trianglemap_find_common_edge(t2, t1) + 2) % 3].origin) && |
62 | not_in_circumcircle(t2, t1->vertices[(trianglemap_find_common_edge(t1, t2) + 2) % 3].origin); | 62 | !in_circumcircle(t2, t1->vertices[(trianglemap_find_common_edge(t1, t2) + 2) % 3].origin); |
63 | } | 63 | } |
diff --git a/test/morpher/quadrilateral.c b/test/morpher/quadrilateral.c index 31b22d6..c632b82 100644 --- a/test/morpher/quadrilateral.c +++ b/test/morpher/quadrilateral.c | |||
@@ -57,5 +57,6 @@ int main(int argc, char **argv) { | |||
57 | test_quadrilateral_flip_diagonal(); | 57 | test_quadrilateral_flip_diagonal(); |
58 | test_quadrilateral_is_delaunay(m(0, 0), m(0, 3), m(3, 3), m(2, 1), false); | 58 | test_quadrilateral_is_delaunay(m(0, 0), m(0, 3), m(3, 3), m(2, 1), false); |
59 | test_quadrilateral_is_delaunay(m(0, 0), m(0, 3), m(3, 3), m(4, -1), true); | 59 | test_quadrilateral_is_delaunay(m(0, 0), m(0, 3), m(3, 3), m(4, -1), true); |
60 | test_quadrilateral_is_delaunay(m(0, 0), m(0, 1), m(1, 1), m(1, 0), true); | ||
60 | return 0; | 61 | return 0; |
61 | } | 62 | } |