typed op• Datenarten: points → volume
• Aufruf: fullseye.apply(img, "tb_plane_sdf", a=0.5, b=0.5) (das 2-D-Modell ist ein Bild plus zwei skalare Regler a,b∈[0,1])

*Die Abbildung ist die tatsächliche Ausgabe auf einer synthetischen 128×128-Eingabe. Links Eingabe, rechts Ausgabe. Punktwolken als Draufsicht-Streudiagramm (Helligkeit = z), 1-D-Reihen als Linie, Volumen als Maximum-Projektion entlang z, Videos als mittleres Bild, komplexe Bilder als Betrag; Rückgabewerte, die kein Bild ergeben, werden als Werte gezeigt.*
*Regler a ändert die Ausgabe nicht (gemessen: identisch bei 0,1 / 0,5 / 0,9).*
*Regler b ändert die Ausgabe nicht (gemessen: identisch bei 0,1 / 0,5 / 0,9).*
Stufen (die vorangehenden Ops → dieser Op, von links nach rechts):
▸ tb_plane_sdf: Stufen (Doku-Website)
Auf anderen Bildern (synthetische Szene / Foto / Münzen. Obere Reihe: Eingaben, untere Reihe: deren Ausgaben. Regler auf Standard):
▸ tb_plane_sdf: andere Eingaben (Doku-Website)
Bewegung (GIF: Bilder / Ansichten / Schnitte nacheinander. Die stehende Abbildung ist die vollständige; das GIF ist ergänzend):

Exaktes vorzeichenbehaftetes Distanzfeld eines Halbraums (der durch eine Ebene abgeschnittenen Seite) (innen negativ, außen positiv).
sdf(p) = (p - point) · n̂. Die Seite, auf die die Normale n̂ zeigt, ist außen (positiv), die Gegenseite innen. Dient für Operationen, die nur eine Seite behalten, etwa Anfasen (chamfer), Schneiden oder "nur oberhalb des Substrats". Durch Stapeln von sdf_intersect lässt sich jedes konvexe Polyeder bauen. Allerdings ist der Schnitt per max außerhalb der Ecken nicht exakt: Baut man aus 6 Ebenen einen Quader, stimmen Belegung (<= 0) und Innenwerte exakt mit box_sdf überein, außen aber wird nahe den Ecken um bis zu 2.1 unterschätzt (gemessen an einer Box mit halber Kante 2, Gitter 0.25) —— eine Standardeigenschaft von CSG; wird der Abstand selbst gebraucht, box_sdf verwenden.
Exaktheit: Eine Ebene hat im ganzen Raum die Gradientennorm 1, daher ist dieser Wert überall der echte vorzeichenbehaftete Abstand (keine Fallunterscheidung, die wie bei box_sdf an den Ecken umschaltet).
Argumente und Prüfung (ValueError):
• grid: float-Array (..., 3) mit letzter Achse 3 (Ausgabe von grid_coords oder eine Punktliste).
• point: 1 Punkt auf der Ebene (3 Elemente).
• normal: Normale der Ebene (3 Elemente; Nullvektor und NaN werden abgewiesen). Die Länge wird automatisch auf 1 normiert, der Betrag beeinflusst das Ergebnis also nicht (nur die Richtung zählt).
Rückgabewert: float64 der Form grid.shape[:-1]. Auf der Normalenseite positiv, auf der Gegenseite negativ, auf der Ebene 0.
Einsatz: sdf_subtract(part, plane_sdf(g, p, n)) "schneidet die Normalenseite dieser Ebene weg". Um die Richtung umzukehren, das Vorzeichen von normal umdrehen (-sdf ergibt dasselbe).
Die 3d-Op plane_sdf, in die 2-D-Evolutionsregistry überbrückt. Die Implementierung ist dieselbe; nur die Aufrufkonvention ist an op(v, a, b) angepasst. Diese Op hat keine Stellgrößen; weder a noch b wird verwendet.
• 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.
Das Programm unten ist nachweislich lauffähig (gleiche Eingabe wie die Abbildung). In der Studio-Hilfe wird dieser Block zu Schaltflächen, die es sofort laden und ausführen.
img_to_points 0.50 0.50 tb_plane_sdf 0.50 0.50
▸ Diese Pipeline laden · Laden & ausführen
Die folgenden Beispiele rufen den zugrunde liegenden Ledger-Op plane_sdf auf. Dieser Brücken-Op ist dieselbe Implementierung, angepasst an die Konvention fn(v, a, b); das Verhalten gilt unverändert (nur die Aufrufform unterscheidet sich).
• sdf_csg — py -3.11 examples_3d/sdf_csg.py
volume als Eingabe)identity · vol_gaussian · vol_median · vol_erode · vol_dilate · vol_threshold · vol_reg_dilate · vol_reg_erode
typed)tb_points_to_voxel · tb_estimate_point_normals · tb_iss_keypoints · tb_project_points · tb_render_point_depth · tb_statistical_outlier_removal · tb_radius_outlier_removal · tb_voxel_grid_downsample
*Provenance: ops.py — 2D 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.