From 9468669981364d48354a0cfcb80071bc50293542 Mon Sep 17 00:00:00 2001 From: Ivo Pischner Date: Tue, 27 Oct 2020 13:19:22 +0100 Subject: [PATCH] Fix for G2/G3 rounding error (#15546) --- Marlin/Marlin_main.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Marlin/Marlin_main.cpp b/Marlin/Marlin_main.cpp index 94ef677..524828d 100644 --- a/Marlin/Marlin_main.cpp +++ b/Marlin/Marlin_main.cpp @@ -3525,7 +3525,8 @@ inline void gcode_G0_G1( const float e = clockwise ^ (r < 0) ? -1 : 1, // clockwise -1/1, counterclockwise 1/-1 dx = p2 - p1, dy = q2 - q1, // X and Y differences d = HYPOT(dx, dy), // Linear distance between the points - h = SQRT(sq(r) - sq(d * 0.5f)), // Distance to the arc pivot-point + h2 = (r - 0.5f * d) * (r + 0.5f * d), // factor to reduce rounding error + h = (h2 >= 0) ? SQRT(h2) : 0.0f, // Distance to the arc pivot-point mx = (p1 + p2) * 0.5f, my = (q1 + q2) * 0.5f, // Point between the two points sx = -dy / d, sy = dx / d, // Slope of the perpendicular bisector cx = mx + e * h * sx, cy = my + e * h * sy; // Pivot-point of the arc