direction op• Data kinds: normals → pairs
• Call: import fullseye as fs; fs.ledger.normals_to_angles(normals) (to call the implementation directly, import reprconv; reprconv.normals_to_angles(normals); from the registry, opsreprconv.get("normals_to_angles"))
Normals (N,3) → azimuth/elevation pairs (N,2) [deg]. The exit from normals.
az = atan2(c1, c0) is the azimuth in the axis0-axis1 plane, el = asin(c2/|v|) is the elevation from axis 2. It is defined with "axis 0/1/2", not x/y/z, because this repo has both point clouds in (z,y,x) order and point clouds in (x,y,z) order -- written with names, the meaning would change depending on which convention the passed array follows.
Invertible: round-tripping with angles_to_normals returns the direction exactly (measured max|Δ| = 6.1e-16, selftest measures it every time). Only the length does not come back -- a normal is a direction, so a non-unit vector becomes a unit vector after the round trip.
Args:
normals: (N, 3) real array. Zero vectors are rejected (the azimuth cannot be defined).
Returns:
(N, 2) float64. Column 0 = azimuth (-180, 180], column 1 = elevation [-90, 90].
Raises:
ValueError: shape is not (N,3) / non-finite / contains a vector of length 0.
• 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.
• poc_tacscalib_sphere_lut — py -3.11 examples/poc_tacscalib_sphere_lut.py
• representation_roundtrip — py -3.11 examples/representation_roundtrip.py
pairs as input)angles_to_normals · shape_index_to_curvature · pairs_to_signal · pairs_to_image2d · pairs_to_table · polar_to_cscalar
direction)angles_to_normals · normals_to_egi
*Provenance: reprconv.py — REPRCONV 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.