"""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()