stagnation_from_centerline — DRIVE 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"))

Verwendung

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).

Referenzen (Beispieldaten, Literatur)

• 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.

Ausführbare Beispiele (verifizierte Samples, die diesen Operator wirklich aufrufen)

• poc_swarm_obstacle_from_flow — py -3.11 examples/poc_swarm_obstacle_from_flow.py

Typkompatible Folge-Operatoren (nehmen table als Eingabe)

course_layout · course_occupancy · course_contains · world_build · world_camera · world_move · lidar_scan · rss_longitudinal_same

Gleiche Kategorie (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.