From 5754472b8f2838a3fb5896d375d5c3e2bfa441bd Mon Sep 17 00:00:00 2001 From: Ed Williams Date: Sun, 13 Oct 2019 12:48:34 -1000 Subject: [PATCH] [1.1.x] 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 8082bc2626..319ec10c6f 100644 --- a/Marlin/Marlin_main.cpp +++ b/Marlin/Marlin_main.cpp @@ -3707,7 +3707,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