TP15-sol.cas
5.05 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
restart;maple_mode(1);cas_setup(0,0,0,1,0,1e-10,10,[1,50,0,25],0,0,0); #radians,pas de cmplx, pas de Sqrt
/* On prend une conique passant par (0,0,1), puis on change de variable.*/
C:=14*(x[1])^2+28*x[1]*x[2]+18*x[1]*x[3]+15*(x[2])^2+3*x[2]*x[3]; // add(add(rand(20)()*x[i]*x[j],i=1..3),j=1..2);
C:=normal(subs(x[1]=x[1]-x[3],x[2]=x[2]-x[3],C));
/* On cree la fonction associee a l'equation de la conique. On verifie qu'elle£ contient: (1,1,1)*/
c:=unapply(C,x);c([1,1,1]);
purge(u,v,a);M:=[1,1,1]+a*[u,v,0];
s:=simplify(c(M)/a);
para:=-coeff(s,a,1)*[1,1,1]+coeff(s,a,0)*[u,v,0];
normal(c(para)); # verification:
Caff:=normal(c(x,y,1)); # l'equation affine.
normal([para[1]/para[3],para[2]/para[3]]); # la forme parametrique affine parametree par P1
normal(subs(v=1,[para[1]/para[3],para[2]/para[3]]));# la conique affine moins un point parametree par R
/* la tangente au point para est la droite AB*/
A1:=[seq(diff(para[i],u),i=1..3)];
B1:=[seq(diff(para[i],v),i=1..3)];
AB:=simplify(a*A1+b*B1);
factor(c(AB)); # On trouve bien une racine double
tgte:=add(subs(x[1]=para[1],x[2]=para[2],x[3]=para[3],diff(C,x[i]))*x[i],i=1..3);
/* verification: ca doit etre nul.*/
simplify(subs(seq(x[i]=A1[i],i=1..3),tgte));
simplify(subs(seq(x[i]=B1[i],i=1..3),tgte));
paff:=w->(subs(v=1,(w[1]+I*w[2])/w[3]));
DC:=plotparam(paff(para),u=-5..5,affichage=bleu+line_width_2):
/* La version implicite est ici plus jolie car on fait bouger le parametre dans un segment£au lieu de R*/
DC:=implicitplot(Caff,x,y,affichage=bleu+line_width_2):
/* -------------------------------------------------------------------------------------*/
/* On peut param\'etrer les equations cart\'esiennes, ie on en choisit 2£ ind\'ependantes et on regarde leur combinaisons lineaires, ou bien on£ considere une droite projective d ne passant pas par le point O, et£ l'on identifie les droites passant par O aux droites (OM) lorsque M decrit D*/
purge(s,t):
A:=matrix(2,2,(i,j)->a[i,j]);
/* On modelise les droites passant par O1 par leur equations cartesiennes, ie les£ combinaisons lineaires de x et y, et celles passant par O2 comme les droites£ (O2,V) ou V bouge sur une droite ne passant pas par O2. Ex on a choisi pour V£ la droite: y=z. On cree maintenant l'homographie h: (s,t)->(s',t'), qui a la£ droite d'equation sx+ty=0 associe la droite passant par O2 et (s',t',t')*/
tmpV:=A*[[s],[t]]; #On veut que tmpV[i] represente les colonnes de A(s,t).
V:=[tmpV[1,1],tmpV[2,1],tmpV[2,1]]; #On met le point V sur la droite y=z choisie.
/* c'est plus simple de prendre 1 forme cartesienne, et une parametrique.£ On etudie O_2+l.V inter sx+ty=0*/
O2:=[0,1,0]; # les coordonees de O_2
[X,Y,Z]:=O2+l*V;
L:= solve(s*X+t*Y=0,l);
/* Attention solve travaille generiquement: par exemple si a(1,1) est nul, il faudrait simplifier par t£ NB det(A) n'est pas nul, donc sa seconde ligne non plus.£ Pb solve a suppose que l'un des 2 coeffs de la seconde ligne est nul en s=0 ou t=0£ le point d'intersection est:*/
S:=O2+L*V;
/* Il aurait mieux valu ne pas utiliser solve. par exemple rester en homog\`ene ainsi:*/
L1:=-coeff(s*X+t*Y,l,1);L2:=coeff(s*X+t*Y,l,0);
S:=L1*O2+L2*V;
/* le cas a(1,1)=0 pose PB. si a(1,1)=0 ca n'est pas bon, il faut simplifier par t*/
purge(X,Y,Z);
/* On passe maintenant en version affine z=1£ Moralement X:=S[1]/S[3];Y:=S[2]/S[3];*/
P:=subs(t=1,X*S[3]-S[1]);Q:=subs(t=1,Y*S[3]-S[2]);
R:=resultant(P,Q,s);
eq:=factor(Z^2*subs(X=X/Z,Y=Y/Z,R)); #On recupere l'equation homogene.
eq:=simplify(eq/det(A)); #detA se factorise. On peut simplifiler car il est non nul
f:=unapply(eq,X,Y,Z);
f(0,0,1);f(op(O2));#sont solutions evidentes.
/* la droite (O_1O_2) a pour equation yo2.x-xo2.y=0, ie (s,t)=(yo2,-xo2) dans le£ faisceau sx+ty=0. En revanche on a parametre le faisceau en O_2£ grace au point (s',t',t') qui est sur la droite (O_1O_2) ssi s'.yo2-xo2.t'=0.£ on doit donc exprimer h(yo2,-xo2) proportionnel a (xo2,yo2).*/
[xo2,yo2,zo2]:=O2;
V1:=A*matrix([[yo2],[-xo2]]);
V2:=matrix([[xo2],[yo2]]);
casparticulier:=det(concat(V1,V2));
factor(subs(casparticulier=0,f(x,y,z)));
/* l'equation de degre 2 se factorise par x ssi A[1,1]=0 ssi h(O_1O_2)=(O_1O_2)£ on recommence avec un autre O_2*/
xo2:=1;yo2:=0;zo2:=1;# les coordonees de O_2
O2:=[xo2,yo2,zo2];
[X,Y,Z]:=O2+l*V;
L1:=-coeff(s*X+t*Y,l,1);L2:=coeff(s*X+t*Y,l,0);
S:=L1*O2+L2*V;
/* pour calculer le resultant on travaille a une variable: ex on fait t=1£ cette fois, On parametre les droites passant par O_2 via les equations£ les droites passant par (1,0,1) sont: s'*(x-z)+t'*y*/
L1:=s*x+y;
L2:=op([x-z,y]*A*[[s],[1]]):;
eq:=resultant(L1,L2,s):; #On a l'equation cartesienne tout de suite
normal(-eq+x^2*a[1,2]-x*y*a[1,1]+x*y*a[2,2]-x*z*a[1,2]-y^2*a[2,1]+y*z*a[1,1]);
/* On a donc montr\'e que si h est une homographie entre deux faisceaux de droites£distincts le lieu de points d'intersection entre d et h(d) decrit une conique£non degeneree passant par O1 et O2 si h(O1O2) est different de (O1O2), et£decrit une droite si h(O1O2)=(O1O2)*/
a:=[[1,1],[2,3]];
/* ------------------------------------------------------------------------------------------------*/