Given S = {v1, . . . , vn} ⊂ R m and p ∈ R m , testing if p ∈ conv(S), the convex hull of S, is a fundamental problem in computational geometry and linear programming. First, we prove a Euclidean distance duality, distinct from classical separation theorems such as Farkas Lemma: p lies in conv(S) if and only if for each p ′ ∈ conv(S) there exists a pivot,Equivalently, p ∈ conv(S) if and only if there exists a witness, p ′ ∈ conv(S) whose Voronoi cell relative to p contains S. A witness separates p from conv(S) and approximate d(p, conv(S)) to within a factor of two. Next, we describe the Triangle Algorithm: given ǫ ∈ (0, 1), an iterate, p ′ ∈ conv(S), and, it stops. Otherwise, if there exists a pivot vj, it replace v with vj and p ′ with the projection of p onto the line p ′ vj . Repeating this process, the algorithm terminates in O(mn min{ǫ −2 , c −1 ln ǫ −1 }) arithmetic operations, where c is the visibility factor, a constant satisfying c ≥ ǫ 2 and sin(∠ppIn particular, the geometry of the input data may result in efficient complexities such as O(mn, t a natural number, or even O(mn ln ǫ −1 ). Additionally, (i) we prove a strict distance duality and a related minimax theorem, resulting in more effective pivots; (ii) describe O(mn ln ǫ −1 )-time algorithms that may compute a witness or a good approximate solution; (iii) prove generalized distance duality and describe a corresponding generalized Triangle Algorithm; (iv) prove a sensitivity theorem to analyze the complexity of solving LP feasibility via the Triangle Algorithm. The Triangle Algorithm is practical and competitive with the simplex method, sparse greedy approximation and first-order methods. Finally, we discuss future work on applications and generalizations.