File: Mathlib/Geometry/Euclidean/Sphere/SecondInter.lean

full_name: EuclideanGeometry.Sphere.secondInter
code: /-- The second intersection of a sphere with a line through a point on that sphere; that point
if it is the only point of intersection of the line with the sphere. The intended use of this
definition is when `p ∈ s`; the definition does not use `s.radius`, so in general it returns
the second intersection with the sphere through `p` and with center `s.center`. -/
def Sphere.secondInter (s : Sphere P) (p : P) (v : V) : P 
goal: P

full_name: EuclideanGeometry.Sphere.secondInter_dist
code: /-- The distance between `secondInter` and the center equals the distance between the original
point and the center. -/
@[simp]
theorem Sphere.secondInter_dist (s : Sphere P) (p : P) (v : V) :
    dist (s.secondInter p v) s.center = dist p s.center 
goal: dist (s.secondInter p v) s.center = dist p s.center

full_name: EuclideanGeometry.Sphere.secondInter_mem
code: /-- The point given by `secondInter` lies on the sphere. -/
@[simp]
theorem Sphere.secondInter_mem {s : Sphere P} {p : P} (v : V) : s.secondInter p v ∈ s ↔ p ∈ s 
goal: s.secondInter p v ∈ s ↔ p ∈ s

full_name: EuclideanGeometry.Sphere.secondInter_zero
code: /-- If the vector is zero, `secondInter` gives the original point. -/
@[simp]
theorem Sphere.secondInter_zero (s : Sphere P) (p : P) : s.secondInter p (0 : V) = p 
goal: s.secondInter p 0 = p

full_name: EuclideanGeometry.Sphere.secondInter_eq_self_iff
code: /-- The point given by `secondInter` equals the original point if and only if the line is
orthogonal to the radius vector. -/
theorem Sphere.secondInter_eq_self_iff {s : Sphere P} {p : P} {v : V} :
    s.secondInter p v = p ↔ ⟪v, p -ᵥ s.center⟫ = 0 
goal: s.secondInter p v = p ↔ ⟪v, p -ᵥ s.center⟫_ℝ = 0

full_name: EuclideanGeometry.Sphere.eq_or_eq_secondInter_of_mem_mk'_span_singleton_iff_mem
code: /-- A point on a line through a point on a sphere equals that point or `secondInter`. -/
theorem Sphere.eq_or_eq_secondInter_of_mem_mk'_span_singleton_iff_mem {s : Sphere P} {p : P}
    (hp : p ∈ s) {v : V} {p' : P} (hp' : p' ∈ AffineSubspace.mk' p (ℝ ∙ v)) :
    p' = p ∨ p' = s.secondInter p v ↔ p' ∈ s 
goal: p' = p ∨ p' = s.secondInter p v ↔ p' ∈ s

full_name: EuclideanGeometry.Sphere.secondInter_smul
code: /-- `secondInter` is unchanged by multiplying the vector by a nonzero real. -/
@[simp]
theorem Sphere.secondInter_smul (s : Sphere P) (p : P) (v : V) {r : ℝ} (hr : r ≠ 0) :
    s.secondInter p (r • v) = s.secondInter p v 
goal: s.secondInter p (r • v) = s.secondInter p v

full_name: EuclideanGeometry.Sphere.secondInter_neg
code: /-- `secondInter` is unchanged by negating the vector. -/
@[simp]
theorem Sphere.secondInter_neg (s : Sphere P) (p : P) (v : V) :
    s.secondInter p (-v) = s.secondInter p v 
goal: s.secondInter p (-v) = s.secondInter p v

full_name: EuclideanGeometry.Sphere.secondInter_secondInter
code: /-- Applying `secondInter` twice returns the original point. -/
@[simp]
theorem Sphere.secondInter_secondInter (s : Sphere P) (p : P) (v : V) :
    s.secondInter (s.secondInter p v) v = p 
goal: s.secondInter (s.secondInter p v) v = p

full_name: EuclideanGeometry.Sphere.secondInter_eq_lineMap
code: /-- If the vector passed to `secondInter` is given by a subtraction involving the point in
`secondInter`, the result of `secondInter` may be expressed using `lineMap`. -/
theorem Sphere.secondInter_eq_lineMap (s : Sphere P) (p p' : P) :
    s.secondInter p (p' -ᵥ p) =
      AffineMap.lineMap p p' (-2 * ⟪p' -ᵥ p, p -ᵥ s.center⟫ / ⟪p' -ᵥ p, p' -ᵥ p⟫) 
goal: s.secondInter p (p' -ᵥ p) = (AffineMap.lineMap p p') (-2 * ⟪p' -ᵥ p, p -ᵥ s.center⟫_ℝ / ⟪p' -ᵥ p, p' -ᵥ p⟫_ℝ)

full_name: EuclideanGeometry.Sphere.secondInter_vsub_mem_affineSpan
code: /-- If the vector passed to `secondInter` is given by a subtraction involving the point in
`secondInter`, the result lies in the span of the two points. -/
theorem Sphere.secondInter_vsub_mem_affineSpan (s : Sphere P) (p₁ p₂ : P) :
    s.secondInter p₁ (p₂ -ᵥ p₁) ∈ line[ℝ, p₁, p₂] 
goal: s.secondInter p₁ (p₂ -ᵥ p₁) ∈ affineSpan ℝ {p₁, p₂}

full_name: EuclideanGeometry.Sphere.secondInter_collinear
code: /-- If the vector passed to `secondInter` is given by a subtraction involving the point in
`secondInter`, the three points are collinear. -/
theorem Sphere.secondInter_collinear (s : Sphere P) (p p' : P) :
    Collinear ℝ ({p, p', s.secondInter p (p' -ᵥ p)} : Set P) 
goal: Collinear ℝ {p, p', s.secondInter p (p' -ᵥ p)}

full_name: EuclideanGeometry.Sphere.wbtw_secondInter
code: /-- If the vector passed to `secondInter` is given by a subtraction involving the point in
`secondInter`, and the second point is not outside the sphere, the second point is weakly
between the first point and the result of `secondInter`. -/
theorem Sphere.wbtw_secondInter {s : Sphere P} {p p' : P} (hp : p ∈ s)
    (hp' : dist p' s.center ≤ s.radius) : Wbtw ℝ p p' (s.secondInter p (p' -ᵥ p)) 
goal: Wbtw ℝ p p' (s.secondInter p (p' -ᵥ p))

full_name: EuclideanGeometry.Sphere.sbtw_secondInter
code: /-- If the vector passed to `secondInter` is given by a subtraction involving the point in
`secondInter`, and the second point is inside the sphere, the second point is strictly between
the first point and the result of `secondInter`. -/
theorem Sphere.sbtw_secondInter {s : Sphere P} {p p' : P} (hp : p ∈ s)
    (hp' : dist p' s.center < s.radius) : Sbtw ℝ p p' (s.secondInter p (p' -ᵥ p)) 
goal: Sbtw ℝ p p' (s.secondInter p (p' -ᵥ p))