Skip to content

Commit 5000c5f

Browse files
committed
feat(Geometry/Euclidean/Angle): the unoriented angle at the center in terms of the angle at the circumference
1 parent 88d006a commit 5000c5f

1 file changed

Lines changed: 40 additions & 0 deletions

File tree

Mathlib/Geometry/Euclidean/Angle/Sphere.lean

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -179,6 +179,46 @@ theorem oangle_center_eq_two_zsmul_oangle {s : Sphere P} {p₁ p₂ p₃ : P} (h
179179
rw [oangle, oangle, o.oangle_eq_two_zsmul_oangle_sub_of_norm_eq_real _ _ hp₂ hp₁ hp₃] <;>
180180
simp [hp₂p₁, hp₂p₃]
181181

182+
/-- The angle at the center of a circle equals twice the angle at the circumference, unoriented
183+
angle version, provided twice the angle at the circumference is at most `π`. -/
184+
theorem angle_center_eq_two_mul_angle_of_two_mul_angle_le_pi {s : Sphere P} {p₁ p₂ p₃ : P}
185+
(hp₁ : p₁ ∈ s) (hp₂ : p₂ ∈ s) (hp₃ : p₃ ∈ s) (hp₂p₁ : p₂ ≠ p₁) (hp₂p₃ : p₂ ≠ p₃)
186+
(h : 2 * ∠ p₁ p₂ p₃ ≤ π) : ∠ p₁ s.center p₃ = 2 * ∠ p₁ p₂ p₃ := by
187+
have hp₁c : p₁ ≠ s.center := by
188+
rintro rfl
189+
rw [center_mem_iff] at hp₁
190+
exact hp₂p₁ (dist_eq_zero.mp (by rw [mem_sphere.mp hp₂, hp₁]))
191+
have hp₃c : p₃ ≠ s.center := by
192+
rintro rfl
193+
rw [center_mem_iff] at hp₃
194+
exact hp₂p₃ (dist_eq_zero.mp (by rw [mem_sphere.mp hp₂, hp₃]))
195+
refine Real.injOn_cos ⟨angle_nonneg p₁ s.center p₃, angle_le_pi p₁ s.center p₃⟩
196+
⟨mul_nonneg zero_le_two (angle_nonneg p₁ p₂ p₃), h⟩ ?_
197+
rw [← cos_oangle_eq_cos_angle hp₁c hp₃c,
198+
oangle_center_eq_two_zsmul_oangle hp₁ hp₂ hp₃ hp₂p₁ hp₂p₃, Real.cos_two_mul,
199+
← cos_oangle_eq_cos_angle hp₂p₁.symm hp₂p₃.symm, two_zsmul, Real.Angle.cos_add]
200+
nlinarith [Real.Angle.cos_sq_add_sin_sq (∡ p₁ p₂ p₃)]
201+
202+
/-- The angle at the center of a circle is `2 * π` minus twice the angle at the circumference,
203+
unoriented angle version, provided twice the angle at the circumference is at least `π`. -/
204+
theorem angle_center_eq_two_pi_sub_two_mul_angle_of_pi_le_two_mul_angle {s : Sphere P}
205+
{p₁ p₂ p₃ : P} (hp₁ : p₁ ∈ s) (hp₂ : p₂ ∈ s) (hp₃ : p₃ ∈ s) (hp₂p₁ : p₂ ≠ p₁)
206+
(hp₂p₃ : p₂ ≠ p₃) (h : π ≤ 2 * ∠ p₁ p₂ p₃) :
207+
∠ p₁ s.center p₃ = 2 * π - 2 * ∠ p₁ p₂ p₃ := by
208+
have hp₁c : p₁ ≠ s.center := by
209+
rintro rfl; rw [center_mem_iff] at hp₁
210+
exact hp₂p₁ (dist_eq_zero.mp (by rw [mem_sphere.mp hp₂, hp₁]))
211+
have hp₃c : p₃ ≠ s.center := by
212+
rintro rfl; rw [center_mem_iff] at hp₃
213+
exact hp₂p₃ (dist_eq_zero.mp (by rw [mem_sphere.mp hp₂, hp₃]))
214+
refine Real.injOn_cos ⟨angle_nonneg p₁ s.center p₃, angle_le_pi p₁ s.center p₃⟩
215+
by linarith [angle_le_pi p₁ p₂ p₃], by linarith⟩ ?_
216+
rw [show (2 : ℝ) * π - 2 * ∠ p₁ p₂ p₃ = -(2 * ∠ p₁ p₂ p₃) + 2 * π by ring,
217+
Real.cos_add_two_pi, Real.cos_neg, ← cos_oangle_eq_cos_angle hp₁c hp₃c,
218+
oangle_center_eq_two_zsmul_oangle hp₁ hp₂ hp₃ hp₂p₁ hp₂p₃, Real.cos_two_mul,
219+
← cos_oangle_eq_cos_angle hp₂p₁.symm hp₂p₃.symm, two_zsmul, Real.Angle.cos_add]
220+
nlinarith [Real.Angle.cos_sq_add_sin_sq (∡ p₁ p₂ p₃)]
221+
182222
/-- Oriented angle version of "angles in same segment are equal" and "opposite angles of a
183223
cyclic quadrilateral add to π", for oriented angles mod π (for which those are the same result),
184224
represented here as equality of twice the angles. -/

0 commit comments

Comments
 (0)