profile_camber — PROFILE measure op

• Data kinds: pairs → pairs

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

Usage

Camber line (the midline between the upper and lower surfaces). Returns (x, yc) as an (n, 2) array.

★Use it knowing the difference in definition. What this returns is "the midpoint of the upper and lower surfaces at each chord position", which is strictly a different thing from the camber line NACA uses when constructing the airfoil (the centerline before the thickness is laid on along the normal). In addition, the chord is taken differently -- the geometric chord takes "the point farthest from the midpoint of the trailing edge" as the leading edge, so on a cambered airfoil it is slightly offset from the origin of the generating coordinates, and the chord is tilted by about 0.1 degree.

Measured (closed-form maximum camber ratio vs the return of this op):

========== =========== ========== ==========

airfoil closed form measured ratio

========== =========== ========== ==========

NACA 0012 0.0000 0.00001 ——

NACA 2412 0.0200 0.01882 0.94

NACA 4412 0.0400 0.03786 0.95

========== =========== ========== ==========

That it gives 0 on a symmetric airfoil has been confirmed (0.00001). That cambered airfoils come out 5-6 % low is due to the definition difference above, not an implementation error. When comparing with design values, compare with a reference shape measured with the same definition (the output of profile_synth_naca4) -- profile_deviation does exactly that.

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_shape_inspection — py -3.11 examples/profile_shape_inspection.py

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

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

Same category (measure)

profile_sides · profile_thickness · profile_leading_edge_radius · profile_trailing_edge_gap


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