File size: 1,549 Bytes
e232e39
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
# 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")