cas_setup(0,0,0,1,0,[1e-10,1e-17],12,[1,50,0,25],0,0,0),xcas_mode(0);
xyztrange(-10.0,10.0,-10.0,10.0,-10.0,10.0,-10.0,10.0,-10.0,10.0,-1.4,1.1,1,0.0,1.0,1);
nodisp(print("medianes")) ;
assume(Ax=-1) ;
assume(Ay=-1) ;
A:=point(Ax,Ay) ;
assume(Bx=0.5) ;
assume(By=1) ;
B:=point(Bx,By) ;
assume(Cx=1) ;
assume(Cy=-1) ;
C:=point(Cx,Cy) ;
triangle(A,B,C) ;
a:=median_line(A,B,C) ;
b:=median_line(B,C,A) ;
c:=median_line(C,A,B) ;
M:=head(inter(a,b)) ;
N:=head(inter(b,c)) ;
normal(distance2(M,N)) ;

nodisp(print("mediatrices")) ;
a:=perpen_bisector(A,B) ;
b:=perpen_bisector(B,C) ;
c:=perpen_bisector(C,A) ;
M:=head(inter(a,b)) ;
N:=head(inter(b,c)) ;
normal(distance2(M,N)) ;

nodisp(print("bissectrices")) ;
A:=point(0) ;
B:=point(1,0) ;
assume(x=1.2) ;
assume(y=-1) ;

C:=point(x,y) ;
triangle(A,B,C) ;
a:=bisector(A,B,C) ;
b:=bisector(B,C,A) ;
c:=bisector(C,A,B) ;
M:=head(inter(a,b)) ;
N:=head(inter(a,c)) ;
normal(M-N) ;
purge(x,y) ;

nodisp(print("Napoleon theorem")) ;
assume(a=-1) ;
assume(b=-1) ;
A:=point(0) ;
B:=point(2,0) ;
C:=point(a,b) ;
T1:=color(equilateral_triangle(A,B),green) ;
T2:=color(equilateral_triangle(B,C),green) ;
T3:=color(equilateral_triangle(C,A),green) ;
color(circumcircle(T1),green) ;
color(circumcircle(T2),green) ;
color(circumcircle(T3),green) ;
AB:=segment(A,B) ;
AC:=segment(A,C) ;
CB:=segment(C,B) ;
M:=normal(isobarycenter(T1)) ;
N:=normal(isobarycenter(T2)) ;
O:=normal(isobarycenter(T3)) ;
MN:=color(segment(M,N),red) ;
NO:=color(segment(N,O),red) ;
OM:=color(segment(O,M),red) ;
normal(distance2(M,N)-distance2(N,O)) ;
normal(distance2(N,O)-distance2(O,M)) ;
purge(a,b) ;

nodisp(print("Feuerbach theorem")) ;
assume(xa=(1/2)) ;
assume(ya=1) ;
A:=point(xa,ya) ;
B:=point(-1,0) ;
AB:=segment(A,B) ;
C:=point(1,0) ;
AC:=segment(A,C) ;
CB:=segment(C,B) ;
E:=midpoint(AB) ;
F:=midpoint(AC) ;
G:=midpoint(CB) ;
c:=circumcircle(E,F,G) ;
H:=altitude(A,B,C) ;
I:=(inter(H,CB))[0] ;
nodisp(print("teste que le pied de la altitude est sur c de 2 facons, doit renvoyer 1 puis 0")) ;
is_element(I,c) ;
nodisp(O:=center(c)) ;
nodisp(l2:=distance2(I,O)) ;
nodisp(rc2:=normal(radius(c)^2)) ;
normal(l2-rc2) ;
nodisp(print("circle incircle de A,B,C, center")) ;
nodisp(d:=incircle(A,B,C)) ;
P:=center(d) ;
OP:=distance2(O,P) ;
rd:=radius(d) ;
rd2:=normal(rd^2) ;
nodisp(print("Le prochain resultat doit etre 0")) ;
normal((OP-rc2-rd2)^2-4*rc2*rd2) ;

nodisp(print("theoreme de Simson")) ;
xa:=0 ;
ya:=0 ;
xb:=1 ;
yb:=0 ;
assume(xc=-1) ;
assume(yc=1) ;
A:=point(xa,ya) ;
B:=point(xb,yb) ;
C:=point(xc,yc) ;
triangle(A,B,C) ;
G:=circumcircle(A,B,C) ;
assume(x=1) ;
assume(y=1) ;
M:=point(x,y) ;
P:=projection(line(B,C),M) ;
Q:=projection(line(C,A),M) ;
R:=projection(line(A,B),M) ;
D1:=factor(numer(im((Q-P)*conj(R-P)))) ;
D12:=normal(-D1/yc^2) ;
D2:=equation(G) ;
D22:=factor(numer(equal2diff(D2))) ;
normal(D12/D22) ;

nodisp(print("Morley theorem")) ;
assume(a1=0.3) ;
assume(a2=0.4) ;
A:=point(0) ;
B:=point(1) ;
nodisp(C:=point(texpand((tan(a2*3))/(tan(a1*3)+tan(a2*3))*(1+(i)*tan(a1*3))))) ;
nodisp(P:=normal(point(texpand((tan(a2))/(tan(a1)+tan(a2))*(1+(i)*tan(a1)))))) ;
nodisp(R:=normal(single_inter(line(0,1+(i)*texpand(tan(2*a1))),line(C,C+1+(i)*texpand(tan(pi/3+2*a1-a2)))))) ;
nodisp(Q:=normal(single_inter(line(1,(i)*texpand(tan(2*a2))),line(C,C+1+(i)*texpand(tan(2*pi/3+a1-2*a2)))))) ;
nodisp(triangle(A,R,C)) ;
nodisp(triangle(B,Q,C)) ;
nodisp(triangle(A,P,B)) ;
nodisp(triangle(P,Q,R)) ;
nodisp(pq2:=distance2(P,Q)) ;
nodisp(pr2:=distance2(P,R)) ;
nodisp(qr2:=distance2(Q,R)) ;
normal(pq2-pr2),normal(pq2-qr2) ;
