jigsawR / tests /debug_archive /debug_arc_math.R
pjt222's picture
Upload folder using huggingface_hub
e232e39 verified
# Calculate arc centers to demonstrate the translation problem
calculate_arc_center <- function(x1, y1, x2, y2, r) {
mx <- (x1 + x2) / 2
my <- (y1 + y2) / 2
d <- sqrt((x2 - x1)^2 + (y2 - y1)^2)
if (d > 2*r) {
return(list(x = NA, y = NA))
}
h <- sqrt(r^2 - (d/2)^2)
dx_perp <- -(y2 - y1) / d
dy_perp <- (x2 - x1) / d
cx <- mx + h * dx_perp
cy <- my + h * dy_perp
list(x = cx, y = cy)
}
cat("Arc Translation Problem Analysis\n")
cat("=================================\n\n")
cat("Original arc (centered at origin):\n")
cat(" Path: M 0 100 A 100 100 0 0 1 86.6 50\n")
original_center <- calculate_arc_center(0, 100, 86.6, 50, 100)
cat(sprintf(" Calculated center: (%.2f, %.2f)\n\n", original_center$x, original_center$y))
cat("Translated arc (simple endpoint translation by dx=50, dy=50):\n")
cat(" Path: M 50 150 A 100 100 0 0 1 136.6 100\n")
translated_center <- calculate_arc_center(50, 150, 136.6, 100, 100)
cat(sprintf(" Calculated center: (%.2f, %.2f)\n\n", translated_center$x, translated_center$y))
cat("Expected translated center: (50, 50)\n")
cat(sprintf("Actual translated center: (%.2f, %.2f)\n", translated_center$x, translated_center$y))
cat(sprintf("ERROR: (%.2f, %.2f)\n\n",
translated_center$x - 50, translated_center$y - 50))
cat("CONCLUSION:\n")
cat("SVG arcs defined by radius + endpoints do NOT translate correctly\n")
cat("when you only translate the endpoints and keep the radius constant.\n")
cat("The arc center implicitly moves by a DIFFERENT amount than (dx, dy).\n")