Library HighSchoolGeometry.droite_Euler


Require Export homothetie_plane.
Require Export cocyclicite.
Require Export orthocentre.
Set Implicit Arguments.
Unset Strict Implicit.

Lemma vec_OAplusOBplusOC_orthogonal :
  A B C A' O M : PO,
 A' = milieu B C
 circonscrit O A B C
 vec O M = add_PP (vec O A) (add_PP (vec O B) (vec O C))
 orthogonal (vec A M) (vec B C).
intros.
cut (orthogonal (vec O A') (vec B C)); intros.
replace (vec A M) with (add_PP (mult_PP (-1) (vec O A)) (vec O M));
 [ idtac | Ringvec ].
replace (add_PP (mult_PP (-1) (vec O A)) (vec O M)) with
 (add_PP (vec O B) (vec O C)).
rewrite (prop_vecteur_milieu (B:=B) (C:=C) (A':=A') O); auto with geo.
rewrite H1; Ringvec.
apply milieu_centrecirconscrit_orthogonal_segment with A; auto.
Qed.

Lemma vec_OAplusOBplusOC_orthocentre :
  A B C O M : PO,
 triangle A B C
 circonscrit O A B C
 vec O M = add_PP (vec O A) (add_PP (vec O B) (vec O C))
 M = orthocentre A B C.
intros.
deroule_triangle A B C.
soit_milieu B C ipattern:A'.
lapply
 (vec_OAplusOBplusOC_orthogonal (A:=A) (B:=B) (C:=C) (A':=A') (O:=O) (M:=M));
 intros; auto.
cut (orthogonal (vec C M) (vec A B)); intros.
cut (orthogonal (vec B M) (vec C A)); intros.
apply orthocentre_def; auto with geo.
cut (orthogonal (vec A M) (vec B C)); intros; auto with geo.
soit_milieu A C ipattern:B'.
apply
 (vec_OAplusOBplusOC_orthogonal (A:=B) (B:=C) (C:=A) (A':=B') (O:=O) (M:=M));
 auto with geo.
apply circonscrit_permute; auto.
apply circonscrit_permute; auto.
rewrite H1; Ringvec.
soit_milieu A B ipattern:C'.
apply
 (vec_OAplusOBplusOC_orthogonal (A:=C) (B:=A) (C:=B) (A':=C') (O:=O) (M:=M));
 auto.
apply circonscrit_permute; auto.
rewrite H1; Ringvec.
Qed.

Lemma centre_gravite_prop_vecteur :
  A B C G O : PO,
 G = centre_gravite A B C
 add_PP (vec O A) (add_PP (vec O B) (vec O C)) = mult_PP 3 (vec O G).
unfold centre_gravite in |- *; intros.
discrimine B C.
rewrite <- (prop_vecteur_bary (a:=1) (b:=2) (A:=A) (B:=C) (G:=G) O); auto.
Ringvec.
discrR.
rewrite H; rewrite H0; rewrite <- (milieu_trivial C); auto.
soit_milieu B C ipattern:A'.
rewrite (prop_vecteur_milieu (B:=B) (C:=C) (A':=A') O); auto.
rewrite <- (prop_vecteur_bary (a:=1) (b:=2) (A:=A) (B:=A') (G:=G) O); auto.
Ringvec.
discrR.
rewrite H1; auto.
Qed.
Hint Resolve centre_gravite_prop_vecteur: geo.

Theorem droite_Euler_fort :
  A B C O G H : PO,
 triangle A B C
 G = centre_gravite A B C
 circonscrit O A B C
 H = orthocentre A B C vec O H = mult_PP 3 (vec O G).
intros.
rewrite <- (centre_gravite_prop_vecteur (A:=A) (B:=B) (C:=C) (G:=G) O); auto.
elim
 existence_representant_som_vecteur with (A := O) (B := B) (C := O) (D := C);
 intros E H4; try clear existence_representant_som_vecteur;
 rewrite <- H4.
elim
 existence_representant_som_vecteur with (A := O) (B := A) (C := O) (D := E);
 intros M H5; try clear existence_representant_som_vecteur;
 rewrite <- H5.
cut (M = H); intros.
rewrite <- H6; auto.
rewrite H3.
apply vec_OAplusOBplusOC_orthocentre with O; auto.
rewrite <- H4; auto.
Qed.

Theorem droite_Euler :
  A B C O G H : PO,
 triangle A B C
 G = centre_gravite A B C
 circonscrit O A B C H = orthocentre A B C alignes O G H.
intros.
apply colineaire_alignes with 3; auto.
apply droite_Euler_fort with (1 := H0); auto.
Qed.