codexgrid-fitting-stroke-coverage.py
grid-fitting-stroke-coverage.py
"""Draw an ideal area-coverage example; write the PNG to the working directory."""
from pathlib import Path
import matplotlib
matplotlib.use("Agg")
import matplotlib.pyplot as plt
import numpy as np
def coverage(intervals):
return np.array([
sum(max(0.0, min(right, column + 1) - max(left, column))
for left, right in intervals)
for column in range(6)
])
def main():
cases = [
("Unfitted: both strokes are 1.2 pixels wide", [(0.4, 1.6), (3.9, 5.1)]),
("Fitted: both strokes are 1.0 pixel wide", [(0.0, 1.0), (4.0, 5.0)]),
]
assert np.allclose(coverage(cases[0][1]), [0.6, 0.6, 0, 0.1, 1, 0.1])
assert np.allclose(coverage(cases[1][1]), [1, 0, 0, 0, 1, 0])
fig = plt.figure(figsize=(9, 4.2), dpi=100, facecolor="white")
fig.suptitle("Grid fitting: matching geometry to a pixel grid",
y=0.97, fontsize=17, weight="bold", color="#172330")
for left, (title, intervals) in zip([0.055, 0.555], cases):
ax = fig.add_axes([left, 0.27, 0.39, 0.55])
values = coverage(intervals)
ax.imshow(np.tile(1.0 - values, (5, 1)), cmap="gray", vmin=0, vmax=1,
extent=(0, 6, 0, 5), origin="lower", interpolation="nearest")
for edge in range(7):
ax.axvline(edge, color="#82909c", linewidth=0.6)
for edge in range(6):
ax.axhline(edge, color="#82909c", linewidth=0.6)
for start, end in intervals:
ax.vlines([start, end], 0.06, 4.94, colors="#bb3e34",
linewidth=1.7, linestyles="dashed")
ax.set_title(title, fontsize=11.3, pad=10)
ax.set_xticks(np.arange(6) + 0.5, labels=[str(i) for i in range(6)])
ax.set_yticks([])
ax.set_xlabel("Pixel column", fontsize=10)
ax.set(xlim=(0, 6), ylim=(0, 5))
ax.text(0.5, -0.28, "Coverage: " + " ".join(f"{v:.1f}" for v in values),
transform=ax.transAxes, ha="center", fontsize=10,
family="DejaVu Sans Mono", color="#34465b")
fig.text(0.5, 0.075, "Red dashes: geometric stroke boundaries",
ha="center", color="#bb3e34", fontsize=11)
fig.text(0.5, 0.025, "Ideal area coverage on white; the fitted outlines deliberately have different geometry.",
ha="center", color="#34465b", fontsize=10.5)
fig.savefig(Path.cwd() / "grid-fitting-stroke-coverage.png", dpi=100,
facecolor="white", transparent=False)
plt.close(fig)
if __name__ == "__main__":
main()