profile_normalise — PROFILE frame op

• Data kinds: pairs → pairs

• Call: import fullseye as fs; fs.ledger.profile_normalise(contour) (to call the implementation directly, import profileops; profileops.profile_normalise(contour); from the registry, opsprofile.get("profile_normalise"))

Usage

Normalises by rotation and translation so that the chord length is 1, the leading edge is at the origin and the chord points along +x.

The scale is changed only by the chord length (the shape is not distorted). Returns the normalised contour.

Procedure: profile_chord_frame gives the leading edge le, the trailing edge te (for an open trailing edge, the midpoint of the gap), the chord length chord and the chord direction angle_deg, and ((contour - le) @ R(-angle).T) / chord is returned. It is only a similarity transform of rotation, translation and uniform scale; the number and order of points are kept (no resampling).

• contour: (N, 2) (x, y), 8 points or more, finite. If you pass (row, col), the chord is still found but upper and lower are swapped (no exception is raised). Whether it is closed is not checked here (profile_sides and later check it).

• Returns: (N, 2) float64. The leading edge is at (0, 0), the trailing edge near (1, 0), x is the chord ratio in [0, 1]. The sign of y (whether the upper surface is positive or negative) is decided by the winding direction of the input and is not flipped.

• Failure: ValueError (shape, too few points, non-finite, chord length 0 = all points coincide).

The leading/trailing edge test is "of the farthest pair, the one whose section is thicker slightly inside = leading edge", so for a symmetric section with the same thickness front and back (an ellipse, etc.) front and back may be swapped. profile_sides / profile_thickness / profile_camber call this internally.

Detailed usage guide

• profile_metrology family guide

References (sample data, literature)

• Sample-data catalog (download URLs / licences) — 2-D uses skimage.data (BSD/public domain) plus synthetic images; 3-D lists download URLs for real data sources (Stanford, PDS, …).

• Operator provenance and references — the sources of the research/methods this op family came from.

• The canonical algorithm (author, year) and its uses are named in the family usage guide above.

Runnable examples (verified samples that actually call this op)

• profile_frame_tour — py -3.11 examples/profile_frame_tour.py

Ops the type connects to (they accept pairs as input)

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

Same category (frame)

profile_chord_frame · profile_resample


*Provenance: profileops.py — PROFILE operator registry. This per-op note is generated by tools/opdocs.py md (do not hand-edit).*

© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.