braid_from_trajectories — DRIVE braidpath op

• Datenarten: any → table

• Aufruf: import fullseye as fs; fs.ledger.braid_from_trajectories(trajectories, obstacles=None, angle=0.1, jitter='auto') (die Implementierung direkt: import braidpath; braidpath.braid_from_trajectories(trajectories, obstacles=None, angle=0.1, jitter='auto'); aus dem Register: opsdrive.get("braid_from_trajectories"))

• GPU: nein (nur CPU-Referenzimplementierung)

Verwendung

Erzeugt aus ebenen Trajektorien (und unbeweglichen Hindernispunkten) ein Zopfwort (Folge von Kreuzungsvorzeichen).

Unter der Annahme geradliniger Bewegung innerhalb jedes Schritts wird der Zeitpunkt, zu dem zwei benachbarte Stränge auf der Projektionsachse x' = x cos θ + y sin θ ihre Reihenfolge tauschen, in geschlossener Form bestimmt (auch die Relativbewegung ist linear, daher gibt es höchstens eine Nullstelle) und in zeitlicher Reihenfolge zu Buchstaben. Läuft der linke Strang unten (auf der Seite mit kleinerem y') nach rechts durch, ergibt das +i (Halbdrehung gegen den Uhrzeigersinn), oben herum −i.

★Tripelpunkte der Projektion: Bei symmetrischen Gitterbewegungen (z. B. zwei Agenten, die sich punktsymmetrisch um einen Hindernispunkt bewegen) drehen sich drei Stränge auf einer Geraden, sodass unter jedem Winkel drei Kreuzungen zusammenfallen. jitter="auto" addiert nur in diesem Fall pro Strang eine kleine konstante Verschiebung (Mindestabstand × JITTER_FRACTION, Richtung nach dem goldenen Winkel) und berechnet neu. Die Verschiebung ist viel kleiner als der Mindestabstand, daher ändert sich der Zopf nicht (durch ein Gate geprüft).

Parameters

trajectories : numpy (K, T, 2) = [x, y] oder eine list von Gitterpfaden (je Agent eine Folge von (row, col)) / ein Planer-dict (paths).

obstacles : (M, 2)-Punkte, optional. Jedes Loch wird durch einen Punkt vertreten (jeder Punkt im Loch ergibt dieselbe Klasse).

angle : Winkel der Projektionsachse [rad]. Die Klassenentscheidung (homotopy_class_compare) hängt nicht vom Winkel ab, das Wort selbst aber schon.

jitter : "auto" oder die Größe der Verschiebung (0 = keine Verschiebung, Obergrenze 1 % des Mindestabstands).

Returns

dict: word (1-D-int-Array), n_strands, n_agents, start_order / end_order (Strangnummern in Positionsreihenfolge), times (Zeitpunkt jedes Buchstabens, in Schritten), angle, jitter (verwendete Verschiebung), clearance (Mindestabstand zwischen den Strängen).

Raises

ValueError: zwei Stränge erreichen denselben Punkt (eine Kollision hat keinen Zopf), Tripelpunkt bei jitter=0 (TriplePointError), falsche Form, NaN.

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_braid_homotopy_classes — py -3.11 examples/poc_braid_homotopy_classes.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 (braidpath)

braid_reduce · braid_artin_images · dynnikov_coordinates · dynnikov_act · braid_equivalent · homotopy_class_compare · pairwise_winding · homotopy_shortest_paths


*Provenance: braidpath.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.