Fix int32 overflow.

This commit is contained in:
Lukáš Hejl 2025-02-19 10:18:31 +01:00 committed by Lukas Matena
parent 0fa7738d6a
commit 974bfbdfbd
2 changed files with 8 additions and 12 deletions

View File

@ -259,13 +259,9 @@ double LineUtils::perp_distance(const Linef &line, Vec2d p)
bool LineUtils::is_parallel(const Line &first, const Line &second) bool LineUtils::is_parallel(const Line &first, const Line &second)
{ {
Point dir1 = direction(first); Vec2i64 dir1 = direction(first).cast<int64_t>();
Point dir2 = direction(second); Vec2i64 dir2 = direction(second).cast<int64_t>();
coord_t cross( return Slic3r::cross2(dir1, dir2) == 0;
static_cast<int64_t>(dir1.x()) * dir2.y() -
static_cast<int64_t>(dir2.x()) * dir1.y()
);
return (cross == 0);
} }
std::optional<Slic3r::Vec2d> LineUtils::intersection(const Line &ray1, const Line &ray2) std::optional<Slic3r::Vec2d> LineUtils::intersection(const Line &ray1, const Line &ray2)

View File

@ -67,11 +67,11 @@ double ParabolaUtils::focal_length(const Parabola &parabola)
bool ParabolaUtils::is_over_zero(const ParabolaSegment &parabola) bool ParabolaUtils::is_over_zero(const ParabolaSegment &parabola)
{ {
Point line_direction = parabola.directrix.b - parabola.directrix.a; Vec2i64 line_direction = (parabola.directrix.b - parabola.directrix.a).cast<int64_t>();
Point focus_from = parabola.focus - parabola.from; Vec2i64 focus_from = (parabola.focus - parabola.from).cast<int64_t>();
Point focus_to = parabola.focus - parabola.to; Vec2i64 focus_to = (parabola.focus - parabola.to).cast<int64_t>();;
bool is_positive_x1 = line_direction.dot(focus_from) > 0.; bool is_positive_x1 = line_direction.dot(focus_from) > 0;
bool is_positive_x2 = line_direction.dot(focus_to) > 0.; bool is_positive_x2 = line_direction.dot(focus_to) > 0;
return is_positive_x1 != is_positive_x2; return is_positive_x1 != is_positive_x2;
} }