What problem does it solve? Recovering the 3D position, orientation, and radius of a circle from its 2D elliptical projection is a classic computer vision problem with inherent ambiguities. This Skill solves it for eye-tracking scenarios, converting pupil or iris ellipses into 3D corneal surface normals and gaze geometry while explicitly handling depth and azimuth ambiguities. ## Core Features & Use Cases - Ellipse-to-3D Inversion: Computes tilt angle via arccos(b/a), resolves azimuth from the ellipse major-axis direction, and builds a right-handed orthonormal basis for the 3D circle plane. - Ambiguity Handling: Detects and labels depth ambiguity, azimuth degeneracy when the circle faces the camera directly, and resolves depth using eyeball sphere priors, stereo views, or depth sensors. - Validated CLI Tool: Ships a runnable Python script with input validation (b/a in (0,1]), unit conversion from pixels to millimeters, and golden test cases for regression checking. - Use Case: In an eye-tracking pipeline, feed a detected pupil ellipse (center, axes, rotation) plus camera intrinsics and a known iris radius to obtain the 3D normal vector of the corneal plane for gaze estimation. ## Quick Start Run the ellipse_to_3d_circle.py script with your ellipse parameters, camera focal length, and known circle radius to get the 3D circle center, normal vector, tilt angle, and confidence flags.