File size: 3,379 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 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 | devtools::load_all()
cat("Edge Coordinate Analysis - Checking if edges are split correctly\n")
cat("================================================================\n\n")
# Generate without separation to see original positions
result <- generate_puzzle(
type = "concentric",
seed = 42,
grid = c(2),
size = c(200),
offset = 0, # No separation
fusion_groups = list(c(1, 2), c(5, 6, 7)),
fusion_style = "dashed",
save_files = FALSE
)
cat("Analyzing edge start/end points for each piece...\n\n")
for (i in seq_along(result$pieces)) {
piece <- result$pieces[[i]]
cat(sprintf("=== PIECE %d (ring %d, pos %d) ===\n",
i, piece$ring_pos$ring, piece$ring_pos$position))
edge_paths <- get_piece_edge_paths(piece)
edge_names <- get_piece_edge_names(piece)
for (edge_name in edge_names) {
path <- edge_paths[[edge_name]]
if (is.null(path) || !nzchar(path)) {
cat(sprintf(" %s: EMPTY PATH!\n", edge_name))
next
}
segs <- parse_svg_path(path)
if (length(segs) < 2) {
cat(sprintf(" %s: TOO SHORT\n", edge_name))
next
}
start_x <- segs[[1]]$x
start_y <- segs[[1]]$y
# Find end point
end_seg <- NULL
for (j in length(segs):2) {
if (segs[[j]]$type != "Z") {
end_seg <- segs[[j]]
break
}
}
is_fused <- isTRUE(piece$fused_edges[[edge_name]])
if (!is.null(end_seg)) {
cat(sprintf(" %s: (%.1f,%.1f) -> (%.1f,%.1f) %s\n",
edge_name, start_x, start_y, end_seg$x, end_seg$y,
if (is_fused) "[FUSED]" else ""))
}
}
cat("\n")
}
# Check for matching fused edges between pieces
cat("=== CHECKING FUSED EDGE MATCHING ===\n\n")
# Fusion group 1: pieces 1 and 2
cat("Fusion Group 1 (pieces 1 & 2):\n")
p1_edge1 <- get_piece_edge_paths(result$pieces[[1]])[["1"]]
p2_inner <- get_piece_edge_paths(result$pieces[[2]])[["INNER"]]
segs1 <- parse_svg_path(p1_edge1)
segs2 <- parse_svg_path(p2_inner)
cat(sprintf(" Piece 1 Edge 1 start: (%.1f, %.1f)\n", segs1[[1]]$x, segs1[[1]]$y))
cat(sprintf(" Piece 2 INNER start: (%.1f, %.1f)\n", segs2[[1]]$x, segs2[[1]]$y))
cat(sprintf(" Match: %s\n\n", all.equal(c(segs1[[1]]$x, segs1[[1]]$y),
c(segs2[[1]]$x, segs2[[1]]$y))))
# Fusion group 2: pieces 5, 6, 7
cat("Fusion Group 2 (pieces 5, 6, 7):\n")
p5_right <- get_piece_edge_paths(result$pieces[[5]])[["RIGHT"]]
p6_left <- get_piece_edge_paths(result$pieces[[6]])[["LEFT"]]
p6_right <- get_piece_edge_paths(result$pieces[[6]])[["RIGHT"]]
p7_left <- get_piece_edge_paths(result$pieces[[7]])[["LEFT"]]
segs5r <- parse_svg_path(p5_right)
segs6l <- parse_svg_path(p6_left)
segs6r <- parse_svg_path(p6_right)
segs7l <- parse_svg_path(p7_left)
cat(sprintf(" P5 RIGHT start: (%.1f, %.1f)\n", segs5r[[1]]$x, segs5r[[1]]$y))
cat(sprintf(" P6 LEFT start: (%.1f, %.1f)\n", segs6l[[1]]$x, segs6l[[1]]$y))
cat(sprintf(" P6 RIGHT start: (%.1f, %.1f)\n", segs6r[[1]]$x, segs6r[[1]]$y))
cat(sprintf(" P7 LEFT start: (%.1f, %.1f)\n", segs7l[[1]]$x, segs7l[[1]]$y))
cat("\nNote: Fused edges between adjacent pieces should share endpoints.\n")
cat("P5.RIGHT end should equal P6.LEFT start (or reversed)\n")
cat("P6.RIGHT end should equal P7.LEFT start (or reversed)\n")
|