profile_normalise — PROFILE frame op

• Datenarten: pairs → pairs

• Aufruf: import fullseye as fs; fs.ledger.profile_normalise(contour) (die Implementierung direkt: import profileops; profileops.profile_normalise(contour); aus dem Register: opsprofile.get("profile_normalise"))

Verwendung

Normiert durch Rotation und Translation so, dass die Sehnenlänge 1 ist, die Vorderkante im Ursprung liegt und die Sehne in +x zeigt.

Die Skalierung erfolgt nur über die Sehnenlänge (die Form wird nicht verzerrt). Zurückgegeben wird die normierte Kontur.

Ablauf: profile_chord_frame liefert Vorderkante le, Hinterkante te (bei offener Hinterkante die Mitte des Spalts), Sehnenlänge chord und Sehnenrichtung angle_deg, und ((contour - le) @ R(-angle).T) / chord wird zurückgegeben. Es ist nur eine Ähnlichkeitstransformation aus Drehung, Verschiebung und gleichförmiger Skalierung; Anzahl und Reihenfolge der Punkte bleiben erhalten (kein Neuabtasten).

• contour: (N, 2) als (x, y), 8 Punkte oder mehr, endlich. Wird (row, col) übergeben, wird die Sehne zwar gefunden, aber oben und unten sind vertauscht (es wird keine Ausnahme ausgelöst). Ob sie geschlossen ist, wird hier nicht geprüft (das prüfen profile_sides und die folgenden).

• Rückgabewert: (N, 2) float64. Die Vorderkante liegt bei (0, 0), die Hinterkante nahe (1, 0), x ist das Sehnenverhältnis in [0, 1]. Das Vorzeichen von y (ob die Oberseite positiv oder negativ ist) folgt aus dem Umlaufsinn der Eingabe und wird nicht umgedreht.

• Fehler: ValueError (Form, zu wenige Punkte, nicht endlich, Sehnenlänge 0 = alle Punkte fallen zusammen).

Die Vorder-/Hinterkantenentscheidung lautet "vom entferntesten Punktpaar ist der Punkt, dessen Querschnitt etwas weiter innen dicker ist = Vorderkante", daher können bei symmetrischen Querschnitten mit gleicher Dicke vorn und hinten (Ellipse usw.) vorn und hinten vertauscht sein. profile_sides / profile_thickness / profile_camber rufen dies intern auf.

Ausführlicher Anwendungsleitfaden

• Leitfaden zur Familie profile_metrology

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)

• profile_frame_tour — py -3.11 examples/profile_frame_tour.py

Typkompatible Folge-Operatoren (nehmen pairs als Eingabe)

profile_perturb · profile_chord_frame · profile_resample · profile_sides · profile_thickness · profile_camber · profile_leading_edge_radius · profile_trailing_edge_gap

Gleiche Kategorie (frame)

profile_chord_frame · profile_resample


*Provenance: profileops.py — PROFILE 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.