construct op• Datenarten: pairs → table
• Aufruf: import fullseye as fs; fs.ledger.curve_locality(points, gaps=(1, 2, 4, 8, 16, 32)) (die Implementierung direkt: import mathops; mathops.curve_locality(points, gaps=(1, 2, 4, 8, 16, 32)); aus dem Register: opsmath.get("curve_locality"))
Punkte mit Indexabstand k entlang der Kurve — wie weit liegen sie in der Ebene auseinander?
> Die ausführliche Beschreibung unten ist der Originaltext — Zusammenfassung und Überschriften sind übersetzt.
The reason a space-filling curve is used for storage layout, texture tiling or rendering order is locality: neighbours in the ordering should stay neighbours in space. This op measures that directly — for each gap k it returns the mean Euclidean distance between points i and i + k.
★Why this earns its place: the claim "Hilbert has better locality than scanning row by row" is usually asserted and never measured. Here it is a table you can read: a Hilbert curve grows roughly as sqrt(k) (measured 1.00 / 1.53 / 2.12 / 3.17 / 4.29 / 6.38 at k = 1 .. 32), while a boustrophedon scan grows nearly linearly (1.00 / 1.96 / 3.79 / 7.07 / 12.12 / 16.07) — an honest, reproducible gap rather than a slogan.
points : (N, 2) array
The curve's points in visiting order.
gaps : ints
Index gaps to report. Gaps at or beyond N are dropped (not an error;
a short curve simply has nothing to say about a long gap).
Returns a table: gap (int), mean_distance, and ratio = mean_distance / mean_distance[gap == 1] so curves of different scales can be compared directly.
Raises ValueError: not an (N, 2) array; fewer than 2 points; non-finite coordinates; every requested gap out of range.
HALCON: no operator.
Jeder mathops-Operator prüft seine Eingabe vor der Berechnung (nichts rutscht stillschweigend durch):
• Komplexe Eingaben lösen ValueError aus — die Umwandlung nach float64 verwirft den Imaginärteil stillschweigend (numpy meldet nur eine ComplexWarning und liefert eine plausibel aussehende, falsche reelle Zahl). Schreiben Sie .real/.imag/abs() explizit oder nutzen Sie complexops.
• Masked Arrays mit maskierten Elementen lösen ValueError aus — die implizite Umwandlung, die die Maske abstreift und die Rohwerte darunter verwendet, wird abgelehnt. Geben Sie explizit an, ob gefüllt oder verworfen wird.
• NaN/Inf löst bei jeder Eingabe ValueError aus (mit Anzahl abgelehnt — es pflanzt sich durch das gesamte Ergebnis fort).
• Formen sind strikt: 1-D und 2-D werden nie implizit hochgestuft oder gebroadcastet (eine Matrix im Vektor-Slot oder ein Vektor im Matrix-Slot löst ValueError aus; reshapen Sie explizit).
• Größenobergrenze: Operatoren, die eine Matrix nehmen, sowie die stat_histogram-Bins lösen jenseits von mathops.MAX_ELEMENTS (2^26 ≈ 67 Mio. Elemente) ValueError aus.
• Leitfaden zur Familie math_metrology
• Katalog der Beispieldaten (Download-URLs / Lizenzen) — 2-D nutzt skimage.data (BSD/Public Domain) plus synthetische Bilder, 3-D nennt Download-URLs echter Datenquellen (Stanford, PDS, …).
• Herkunft und Literatur der Operatoren — die Quellen der Forschung/Verfahren, auf denen diese Operatorfamilie beruht.
• Der kanonische Algorithmus (Autor, Jahr) und seine Anwendungen stehen im Familienleitfaden oben.
• poc_theorems_as_pictures — py -3.11 examples/poc_theorems_as_pictures.py
table als Eingabe)dynsys_poincare_section · dwt_inverse · chebyshev_eval_nd
construct)circle_packing_apollonian · ford_circles · phyllotaxis_pattern · neighbour_index_gaps · ifs_fractal · ifs_similarity_dimension · space_filling_curve
*Provenance: mathops.py — MATH Operator-Registry. Diese Notiz wird von tools/opdocs.py md erzeugt (nicht von Hand bearbeiten).*
© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.