swarmflow op• Datenarten: table → table
• Aufruf: import fullseye as fs; fs.ledger.stagnation_from_centerline(field, speed=None, d_range=(0.04, 0.6), min_points: 'int' = 4, n_iter: 'int' = 80) -> 'dict' (die Implementierung direkt: import swarmflow; swarmflow.stagnation_from_centerline(field, speed=None, d_range=(0.04, 0.6), min_points: 'int' = 4, n_iter: 'int' = 80) -> 'dict'; aus dem Register: opsdrive.get("stagnation_from_centerline"))
Linearisiert das Defizit auf der Mittellinie und liest den stromaufwärtigen Auftreffpunkt (Staupunkt), den Hindernismittelpunkt und den Radius ab (Implementierung 1, nur stromaufwärtige Punkte).
1. Unter den Gitterzellen, deren Defizit (3 × 3-Mittel) die Obergrenze von d_range überschreitet, gilt die am weitesten stromaufwärts gelegene als "nahe am Aufprallpunkt".
2. In Spalten etwas stromaufwärts davon (4 Spalten) wird die Zeile mit maximalem Defizit per Parabel subpixelgenau bestimmt; der Mittelwert ist die Mittellinie y_c (das Defizit stromaufwärts R²(Δx² − Δy²)/(Δx² + Δy²)² ist bei Δy = 0 maximal).
3. In Höhe y_c wird das Defizit per linearer Interpolation zwischen Zeilen genommen, und auf Zellen stromaufwärts des Punktes nahe dem Aufprall, die innerhalb von d_range liegen, wird 1/√d = (x_c − x)/R per gewichteter kleinster Quadrate angepasst (das Geschwindigkeitsrauschen σ_d wächst in 1/√d auf σ_d/(2d^{3/2}), daher Gewicht d^{3/2} —— entfernte Punkte mit kleinem Defizit schwanken stark durch Rauschen): R = −1/Steigung, x_c = Achsenabschnitt × R. Staupunkt = (x_c − R, y_c).
4. Ist speed nicht angegeben, wird U neu geschätzt, indem die geschlossene Form aus u am stromaufwärtigen Rand herausdividiert wird, und Schritt 3 wiederholt (bis die Änderung von U unter 1e-9 liegt oder n_iter-mal. Die Konvergenz ist erster Ordnung, etwa 30 Durchläufe in einem Feld mit R = 0.6 und Abstand 3 zum Rand). Auch der stromaufwärtige Rand ist mit 1/r² abgesenkt (4 % bei R = 0.6, Abstand 3), daher verbiegt der direkte Median am Rand als U die Gerade.
Returns:
dict: stagnation (x, y), center (x, y), radius, n_used, rms_residual (Residuum der 1/√d-Anpassung),
speed, ok (True, wenn genug Punkte vorhanden sind und die Steigung negativ ist).
• 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_swarm_obstacle_from_flow — py -3.11 examples/poc_swarm_obstacle_from_flow.py
table als Eingabe)course_layout · course_occupancy · course_contains · world_build · world_camera · world_move · lidar_scan · rss_longitudinal_same
swarmflow)sph_kernel · sph_density_pressure · swarm_simulate · swarm_render_overhead · swarm_field_from_tracks · swarm_field_from_piv · potential_flow_cylinder · velocity_deficit_map
*Provenance: swarmflow.py — DRIVE 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.