mirror of
git://projects.qi-hardware.com/cae-tools.git
synced 2024-12-23 03:36:27 +02:00
poly2d/p2d_attrib.c (angle_3): don't divide by zero ...
This broke p2d_is_cw which in turn tripped CGAL::create_interior_skeleton_and_offset_polygons_with_holes_2 with the infamous terminate called after throwing an instance of 'CGAL::Assertion_exception' what(): CGAL ERROR: assertion violation! Expr: lParent File: /usr/include/CGAL/arrange_offset_polygons_2.h Line: 94
This commit is contained in:
parent
05d3d50421
commit
7ca942d0e9
@ -28,19 +28,23 @@ static double angle_3(const struct v2d *a, const struct v2d *b,
|
|||||||
{
|
{
|
||||||
double ax, ay, bx, by;
|
double ax, ay, bx, by;
|
||||||
double aa, bb;
|
double aa, bb;
|
||||||
double angle;
|
double cross, angle;
|
||||||
|
|
||||||
ax = b->x - a->x;
|
ax = b->x - a->x;
|
||||||
ay = b->y - a->y;
|
ay = b->y - a->y;
|
||||||
bx = c->x - b->x;
|
bx = c->x - b->x;
|
||||||
by = c->y - b->y;
|
by = c->y - b->y;
|
||||||
|
|
||||||
|
cross = ax * by - ay * bx;
|
||||||
|
if (!cross)
|
||||||
|
return 0;
|
||||||
|
|
||||||
aa = hypot(ax, ay);
|
aa = hypot(ax, ay);
|
||||||
bb = hypot(bx, by);
|
bb = hypot(bx, by);
|
||||||
|
|
||||||
angle = acos((ax * bx + ay * by) / aa / bb) / M_PI * 180.0;
|
angle = acos((ax * bx + ay * by) / aa / bb) / M_PI * 180.0;
|
||||||
|
|
||||||
return ax * by - ay * bx >= 0 ? angle : -angle;
|
return cross >= 0 ? angle : -angle;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
Loading…
Reference in New Issue
Block a user