diff --git a/src/libslic3r/Polygon.cpp b/src/libslic3r/Polygon.cpp index e744272ac0..66aa224ed7 100644 --- a/src/libslic3r/Polygon.cpp +++ b/src/libslic3r/Polygon.cpp @@ -33,32 +33,16 @@ Polyline Polygon::split_at_index(int index) const return polyline; } -/* -int64_t Polygon::area2x() const -{ - size_t n = poly.size(); - if (n < 3) - return 0; - - int64_t a = 0; - for (size_t i = 0, j = n - 1; i < n; ++i) - a += int64_t(poly[j](0) + poly[i](0)) * int64_t(poly[j](1) - poly[i](1)); - j = i; - } - return -a * 0.5; -} -*/ - double Polygon::area(const Points &points) { - size_t n = points.size(); - if (n < 3) - return 0.; - double a = 0.; - for (size_t i = 0, j = n - 1; i < n; ++i) { - a += ((double)points[j](0) + (double)points[i](0)) * ((double)points[i](1) - (double)points[j](1)); - j = i; + if (points.size() >= 3) { + Vec2d p1 = points.back().cast(); + for (const Point &p : points) { + Vec2d p2 = p.cast(); + a += cross2(p1, p2); + p1 = p2; + } } return 0.5 * a; }