Instead of the type Has_bisector_constructions_type that relied on
SFINAE for choosing bisectors, use Tag_has_bisector_constructions
tag which is typedef'ed to be Tag_true for Linf traits.
Signed-off-by: Panagiotis Cheilaris <philaris@cs.ntua.gr>
Define copy constructor and assignment operator using
respective base class constructor/operator.
Signed-off-by: Panagiotis Cheilaris <philaris@cs.ntua.gr>
This change requires a change in the base class of the Linf
algorithm to support the insert_point_on_segment_ptr and
insert_exact_point_on_segment_ptr function pointers.
Signed-off-by: Panagiotis Cheilaris <philaris@cs.ntua.gr>
This fixes a problem that manifests with input n88.cin:
s 23.194048 69.95298 23.186834 69.952034
s 22.381594 70.510712 22.38833 70.519165
s 22.393114 70.519165 22.406164 70.512787
Vertex_conflict (pqrt)=
(p 23.186834 69.952034)
(p 22.38833 70.519165)
(s 22.381594 70.510712 22.38833 70.519165)
(p 22.393114 70.519165) returns 1 or (B, D, CD; E) returns 1,
although it should return -1.
I introduce a new function linf_radius_pps that chooses one
of the two points of the Voronoi vertex based on its proximity
to the argument t of the incircle test.
Signed-off-by: Panagiotis Cheilaris <philaris@cs.ntua.gr>
This fixes a problem that manifests with input n71.cin:
s 11.979542 63.269928 12.073787 63.172432
s 10.011458 64 10.041777 64
s 11.174461 64 11.17787 64
debug: Vertex_conflict (pqrt)=
(p 11.979542 63.269928)
(p 10.041777 64)
(s 10.011458 64 10.041777 64)
(p 11.174461 64)
returns -1, or vc(A, D, CD ; E) returns -1 (NEGATIVE),
although it should return POSITIVE (i.e., no conflict).
The fix is using the new is_on_hv_seg_line function, which checks
if the test point is on the line of the axis-parallel segment r.
Function is_on_hv_seg_line is invoked in the easy degeneracies
tests.
Signed-off-by: Panagiotis Cheilaris <philaris@cs.ntua.gr>
This is a problem that manifests with input n52.cin:
s 22.649618 70.68029799999999 22.651001 70.683487
s 22.651001 70.683487 22.654936 70.684631
s 22.654451 70.688507 22.633778 70.683037
debug infinite-edge-int-cf tocheck (q,s,r,t,sgn)=
p 22.651001 70.683487
s 22.651001 70.683487 22.654936 70.684631
s 22.649618 70.680298 22.651001 70.683487
s 22.654451 70.688507 22.633778 70.683037
-1
returns 0
otherwise: iecf (B, BC, AB, DE, -1) returns 0 (false)
although it should return 1 (true)
The fix uses function zero_voronoi_area.
Signed-off-by: Panagiotis Cheilaris <philaris@cs.ntua.gr>
This is a problem that manifests with input n41.cin:
s 23.980547 71.044022 23.96011 71.05307000000001
s 23.96011 71.05307000000001 23.950411 71.05497
s 23.957935 71.07712600000001 23.960318 71.07725499999999
s 23.960318 71.07725499999999 23.984632 71.073189
debug finite-edge-int-cf with (p,q,r,s,t,sgn)= s 23.957935 71.077126 23.960318 71.077255 p 23.96011 71.05307 s 23.980547 71.044022 23.96011 71.05307 s 23.96011 71.05307 23.950411 71.05497 s 23.960318 71.077255 23.984632 71.073189 -1 returns 0 (false)
although it should return 1 (true)
otherwise fecf (DE, B, AB, BC, EF, -1) returns 0 although it should return 1
The fix uses a new function zero_voronoi_area.
Signed-off-by: Panagiotis Cheilaris <philaris@cs.ntua.gr>
Related to input n31.cin:
s 25.966988 70.978706 25.987635 70.97238900000001
s 25.987635 70.97238900000001 26.000231 70.97238900000001
s 26.000231 70.97238900000001 26.015379 70.975082
s A B s B C s C D
Vertex_conflict pqrt ( (AB, BC, CD) ; C ) was returning NEGATIVE
and now it returns POSITIVE.
Signed-off-by: Panagiotis Cheilaris <philaris@cs.ntua.gr>
This is a fix for field number types, for a vertex conflict
(p,q,r,t) when t is an endpoint of r and t is not axis-parallel.
The problem manifested for input n11.cin:
s 4.7031002 61 4.70013 60.996868
s 4.7356453 61 4.7417111 61.018108
s 4.743824 61.0336 4.7237062 61.037254
(s A B, s C D, s E F)
The vertex conflict predicate (A, CD, F ; C) returned NEGATIVE.
Signed-off-by: Panagiotis Cheilaris <philaris@cs.ntua.gr>
This fixes a problem when a floating point filtering kernel is
used and the input consists of non-integer numbers. The problem
manifestated with input n2scaled.cin:
s 4.703 61.000 4.700 60.996
s 4.732 60.997 4.735 61.000
(s A B, s C D)
The vertex conflict predicate (A, D, inf ; AB) returned NEGATIVE.
This was because an oriented side predicate for line AD and point
A of segment AB was computed. This predicate does not have to be
run, because we already know that A is an endpoint of AB.
Signed-off-by: Panagiotis Cheilaris <philaris@cs.ntua.gr>
It seems unavoidable but some of the unnatural coordinates
of the extreme points are needed. For example, the x coordinate
of the bottom point is needed in side of bounded square.
Signed-off-by: Panagiotis Cheilaris <philaris@cs.ntua.gr>
Introduction of analyze_smalleq that returns a SmallerEqTuple,
is_L_shaped check and are_at_three_corners check.
Avoid checking some Comparison_result.
Signed-off-by: Panagiotis Cheilaris <philaris@cs.ntua.gr>
This fixes a bug in the validity test for input pssd5aless2.cin:
p 100 0
s 150 0 50 -100
p 100 100
p -100 100
(A, BC, D, E)
In particular vertex conflict (BC, D, E, A) was returning -1
and now it returns ZERO.
At the same time, we should keep a negative predicate return value
for input parpar2.cin:
s -250 50 -50 -150
p -100 -50
p -60 -50
p -150 50
Signed-off-by: Panagiotis Cheilaris <philaris@cs.ntua.gr>
Function points_inside_touching_sides_v now supports PPPx, PPSx,
and PSSx cases. Before, it supported only cases with two segments.
Signed-off-by: Panagiotis Cheilaris <philaris@cs.ntua.gr>