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)
{
Point dir1 = direction(first);
Point dir2 = direction(second);
coord_t cross(
static_cast<int64_t>(dir1.x()) * dir2.y() -
static_cast<int64_t>(dir2.x()) * dir1.y()
);
return (cross == 0);
Vec2i64 dir1 = direction(first).cast<int64_t>();
Vec2i64 dir2 = direction(second).cast<int64_t>();
return Slic3r::cross2(dir1, dir2) == 0;
}
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)
{
Point line_direction = parabola.directrix.b - parabola.directrix.a;
Point focus_from = parabola.focus - parabola.from;
Point focus_to = parabola.focus - parabola.to;
bool is_positive_x1 = line_direction.dot(focus_from) > 0.;
bool is_positive_x2 = line_direction.dot(focus_to) > 0.;
Vec2i64 line_direction = (parabola.directrix.b - parabola.directrix.a).cast<int64_t>();
Vec2i64 focus_from = (parabola.focus - parabola.from).cast<int64_t>();
Vec2i64 focus_to = (parabola.focus - parabola.to).cast<int64_t>();;
bool is_positive_x1 = line_direction.dot(focus_from) > 0;
bool is_positive_x2 = line_direction.dot(focus_to) > 0;
return is_positive_x1 != is_positive_x2;
}