From 7554582056c60d3787cc80ec0e5d84b88679ae66 Mon Sep 17 00:00:00 2001 From: didericis Date: Mon, 15 Jun 2026 11:06:49 -0400 Subject: [PATCH] Draw tread 0 (the source cap) in the dual-cut experiment Add draw_cap_png and a --cap-png flag: render tread 0 as a wheel (source hub, link-cycle rim, cap triangles filled, cap cut marked) from the extract_tread roles, since tread 0 is skipped by tire recognition (a wheel has no up teeth). Render funcD seed7's cap. Co-Authored-By: Claude Opus 4.8 --- .../experiments/funcD_seed7_tread0.png | Bin 0 -> 64730 bytes .../medial_tire_dual_cut_experiment.py | 79 ++++++++++++++++++ 2 files changed, 79 insertions(+) create mode 100644 papers/medial_tire_cuts/experiments/funcD_seed7_tread0.png diff --git a/papers/medial_tire_cuts/experiments/funcD_seed7_tread0.png b/papers/medial_tire_cuts/experiments/funcD_seed7_tread0.png new file mode 100644 index 0000000000000000000000000000000000000000..d45a8506cdbf73abb7bb304a15af0270864e73b4 GIT binary patch literal 64730 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 literal 0 HcmV?d00001 diff --git a/papers/medial_tire_cuts/experiments/medial_tire_dual_cut_experiment.py b/papers/medial_tire_cuts/experiments/medial_tire_dual_cut_experiment.py index 883c0f7..f4801b6 100644 --- a/papers/medial_tire_cuts/experiments/medial_tire_dual_cut_experiment.py +++ b/papers/medial_tire_cuts/experiments/medial_tire_dual_cut_experiment.py @@ -467,6 +467,80 @@ def draw_tire_cuts_png(result, path): plt.close(fig) +def draw_cap_png(result, path): + """Render tread 0, the source cap: a wheel with the source at the hub, its + link cycle as the rim, the cap triangles (down teeth) filled, and the cap + cut marked. Tread 0 is skipped by tire recognition (a wheel has no up + teeth), so this draws the ``extract_tread`` roles directly.""" + import math + import matplotlib + matplotlib.use("Agg") + import matplotlib.pyplot as plt + + G, source = result["G"], result["source"] + faces, emb = triangular_faces(G) + levels = nx.single_source_shortest_path_length(G, source) + tr = extract_tread(faces, levels, 0) + if tr is None: + raise ValueError("no tread-0 (cap) faces") + link = list(emb.neighbors_cw_order(source)) + cap_cuts = {c["medial_vertex"] for c in result.get("cap_cuts", [])} + + pos = {source: (0.0, 0.0)} + k = len(link) + for i, v in enumerate(link): + a = math.radians(90 - i * 360.0 / k) + pos[v] = (math.cos(a), math.sin(a)) + + fig, ax = plt.subplots(figsize=(6.5, 6.8)) + for f in tr["tread_faces"]: + if all(v in pos for v in f): + xy = [pos[v] for v in f] + ax.fill([p[0] for p in xy], [p[1] for p in xy], + color="#eef3fa", zorder=0) + + def edge(u, v, **kw): + ax.plot([pos[u][0], pos[v][0]], [pos[u][1], pos[v][1]], **kw) + + for u, v in tr["annular"]: # spokes (source -> link) + edge(u, v, color="0.45", lw=1.0, zorder=1) + for u, v in tr["down"]: # link cycle (down-tooth bases) + edge(u, v, color="black", lw=1.6, zorder=1) + + ax.plot(*pos[source], "o", ms=11, mfc="#cfe0f3", mec="#3a6ea5", zorder=4) + ax.text(*pos[source], str(source), ha="center", va="center", fontsize=9, + fontweight="bold", color="#234", zorder=5) + for v in link: + ax.plot(*pos[v], "o", ms=9, mfc="white", mec="black", zorder=4) + x, y = pos[v] + ax.text(x * 1.13, y * 1.13, str(v), ha="center", va="center", fontsize=9) + + for u, v in list(tr["annular"]) + list(tr["down"]): + mx, my = (pos[u][0] + pos[v][0]) / 2, (pos[u][1] + pos[v][1]) / 2 + cut = ekey(u, v) in cap_cuts + ax.plot(mx, my, "s", ms=5, mfc=("#cc2020" if cut else "#888"), + mec="none", zorder=3) + if cut: + dx, dy = pos[v][0] - pos[u][0], pos[v][1] - pos[u][1] + L = math.hypot(dx, dy) or 1.0 + px, py = -dy / L * 0.13, dx / L * 0.13 + ax.plot([mx - px, mx + px], [my - py, my + py], + color="#cc2020", lw=2.2, zorder=5) + ax.text(mx + 0.12, my, "cap cut", color="#cc2020", fontsize=7, + va="center") + + ax.set_title(f"tread 0 (source cap) -- source {source}, link {link}\n" + f"{len(tr['tread_faces'])} cap triangles; no up teeth (skipped); " + f"down teeth = link cycle", fontsize=8) + ax.set_aspect("equal") + ax.axis("off") + ax.set_xlim(-1.4, 1.4) + ax.set_ylim(-1.4, 1.4) + fig.tight_layout() + fig.savefig(path, dpi=150) + plt.close(fig) + + def main(): parser = argparse.ArgumentParser( description=__doc__, formatter_class=argparse.RawDescriptionHelpFormatter) @@ -480,6 +554,8 @@ def main(): parser.add_argument("--png", metavar="PATH", help="render the dual cut to PNG") parser.add_argument("--tire-png", metavar="PATH", help="render each full medial tire cut to PNG") + parser.add_argument("--cap-png", metavar="PATH", + help="render tread 0 (the source cap) to PNG") args = parser.parse_args() rng = random.Random(args.seed) @@ -506,6 +582,9 @@ def main(): if args.tire_png: draw_tire_cuts_png(result, args.tire_png) print(f"wrote {args.tire_png}") + if args.cap_png: + draw_cap_png(result, args.cap_png) + print(f"wrote {args.cap_png}") if __name__ == "__main__":