halftone_moire_period — PRINTPATH npr op

• Data kinds: none → table (an op determined by its arguments alone — it takes no image or data input)

• Call: import fullseye as fs; fs.ledger.halftone_moire_period(lpi_a=60.0, angle_a_deg=45.0, lpi_b=60.0, angle_b_deg=75.0, pixel_um=25.4) (to call the implementation directly, import printpath; printpath.halftone_moire_period(lpi_a=60.0, angle_a_deg=45.0, lpi_b=60.0, angle_b_deg=75.0, pixel_um=25.4); from the registry, opsprintpath.get("halftone_moire_period"))

Usage

The beat between two halftone screens — period and direction, in closed form.

Each screen is a frequency vector `f (cos t, sin t)`; where two screens

overlap the visible moiré is the difference vector, so its period is

`1 / |f_a - f_b|` and its direction is that of the difference. For equal

rulings the magnitude reduces to `2 f sin(dt / 2)`, which is why the beat

period grows without bound as the angle difference goes to zero — two plates

at nearly the same angle give a huge, very visible moiré.

★Why this earns its place: the prediction is available before any

screen is drawn, and :func:halftone_screen plus an FFT can measure the beat

out of the picture. Two independent routes to one number.

Returns a `table: period_px, angle_deg, freq_cycles_per_px`.

Raises `ValueError`: non-positive ruling or pitch; two screens that are

identical in both ruling and angle (the difference vanishes — there is no

beat, and returning `inf` silently would be worse than saying so).

Detailed usage guide

• printpath family guide

References (sample data, literature)

• Sample-data catalog (download URLs / licences) — 2-D uses skimage.data (BSD/public domain) plus synthetic images; 3-D lists download URLs for real data sources (Stanford, PDS, …).

• Operator provenance and references — the sources of the research/methods this op family came from.

• The canonical algorithm (author, year) and its uses are named in the family usage guide above.

Runnable examples (verified samples that actually call this op)

• poc_beats_fringes_and_screens — py -3.11 examples/poc_beats_fringes_and_screens.py

• poc_moire_screen — py -3.11 examples/poc_moire_screen.py

• poc_print_registration — py -3.11 examples/poc_print_registration.py

Ops the type connects to (they accept table as input)

gcode_write · gcode_extrusion_volume · gcode_time_estimate · gcode_layer_image · contours_to_gcode

Same category (npr)

halftone_screen · engrave_lines · hatch_field · mosaic_tiles_sites · mosaic_tiles_render


*Provenance: printpath.py — PRINTPATH operator registry. This per-op note is generated by tools/opdocs.py md (do not hand-edit).*

© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.