File size: 2,230 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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
# Debug circle path order issue

cat("=== Debug Circle Path Order ===\n\n")

source("R/logging.R")
source("R/concentric_geometry.R")
source("R/hexagonal_bezier_generation.R")
source("R/concentric_edge_generation.R")

rings <- 3
diameter <- 200
seed <- 42
tabsize <- diameter * 0.10

edge_data <- generate_concentric_edge_map(
  rings = rings,
  seed = seed,
  diameter = diameter,
  tabsize = tabsize,
  jitter = 4,
  center_shape = "circle"
)

piece1_edges <- edge_data$piece_edges[[1]]
radial_edges <- piece1_edges[sapply(piece1_edges, function(e) e$type == "radial")]

cat("Circle center should go around counter-clockwise:\n")
cat("  0° -> 60° -> 120° -> 180° -> 240° -> 300° -> 0°\n\n")

cat("Current edge traversal:\n")
for (i in seq_along(radial_edges)) {
  edge_info <- radial_edges[[i]]
  edge <- edge_data$edge_map[[edge_info$edge_ref]]

  if (edge_info$is_forward) {
    start_pt <- edge$start
    end_pt <- edge$end
    direction <- "forward (start->end)"
  } else {
    start_pt <- edge$end
    end_pt <- edge$start
    direction <- "reverse (end->start)"
  }

  start_angle <- atan2(start_pt[2], start_pt[1]) * 180 / pi
  end_angle <- atan2(end_pt[2], end_pt[1]) * 180 / pi

  cat(sprintf("Edge %d (%s): %.1f° -> %.1f° [%s]\n",
              i, edge_info$edge_ref, start_angle, end_angle, direction))
}

cat("\n\nThe problem: Using 'reverse' goes from v2 to v1, but the edges\n")
cat("are stored with v1=inner-start (lower angle) and v2=inner-end (higher angle)\n")
cat("So reverse goes from HIGH angle to LOW angle.\n\n")

cat("For piece 2 (neighbor): V1 is at 0°, V2 is at 60°\n")
cat("  Edge forward: 0° -> 60° (correct for ring 1 piece)\n")
cat("  Edge reverse: 60° -> 0° (correct for circle going clockwise)\n\n")

cat("But circle should go COUNTER-CLOCKWISE (increasing angles)!\n")
cat("So circle should use FORWARD, not REVERSE.\n\n")

cat("Let's verify the expected traversal order:\n")
cat("  Start at 0° (V1 of piece 2)\n")
cat("  Go to 60° (V2 of piece 2 = V1 of piece 3)\n")
cat("  Go to 120° (V2 of piece 3 = V1 of piece 4)\n")
cat("  etc.\n\n")

cat("This means circle should use is_forward = TRUE, not FALSE!\n")