Page 1 sur 1
cercles tangents à 3 droites
Publié : dim. juin 17, 2012 9:19 pm
par alb
Le but est de trouver le centre et le rayon d'un des 4 cercles tangents à 3 droites.
Voici d'abord l'exemple numérique qui marche très bien
Code : Tout sélectionner
u:=20;v:=25;a:=14.5;b:=18;c:=9.5;d:=10.5;ee:=4;f:=3;
A:=point(u,a):;B:=point(v,b):;C:=point(u,c):;D:=point(v,d):;E:=point(u,ee):;F:=point(v,f):;
M:=inter_unique(droite(A,B),droite(C,D)):;
N:=inter_unique(droite(A,B),droite(E,F)):;
P:=inter_unique(droite(C,D),droite(E,F)):;
Cercle:=exinscrit(N,P,M):;
Centre:=centre(Cercle):;
rayon(Cercle)
coordonnees(Centre)
On passe ensuite à des coordonnées formelles (sauf u et v):
Code : Tout sélectionner
u:=20;v:=25;
A:=point(u,a):;B:=point(v,b):;C:=point(u,c):;D:=point(v,d):;E:=point(u,ee):;F:=point(v,f):;
M:=inter_unique(droite(A,B),droite(C,D)):;
N:=inter_unique(droite(A,B),droite(E,F)):;
P:=inter_unique(droite(C,D),droite(E,F)):;
Cercle:=exinscrit(N,P,M):;
Centre:=centre(Cercle):;
abscisse(Centre)
ordonnee(Centre)
rayon(Cercle) // le calcul s'éternise, on peut stopper
On ne peut pas obtenir le rayon du cercle.
Re: cercles tangents à 3 droites
Publié : lun. juin 18, 2012 3:29 pm
par parisse
je ne pense pas qu'on puisse y faire grand chose, quand on voit déjà la taille de la formule retournée pour le cercle, on imagine qu'ensuite prendre la norme du diamètre du cercle (le problème c'est le format de stockage des cercles qui utilise un diamètre et pas centre+rayon)...
Bon, en sachant que exinscrit calcule le rayon au préalable et que le cercle est stocké par un diamètre, ici horizontal, on peut sortir une formule horrible en mettant
Code : Tout sélectionner
u:=0; v:=1; // pas la patience avec u:=20 et v:=25 ...
A:=point(u,a):;B:=point(v,b):;C:=point(u,c):;D:=point(v,d):;E:=point(u,ee):;F:=point(v,f):;
M:=inter_unique(droite(A,B),droite(C,D)):;
N:=inter_unique(droite(A,B),droite(E,F)):;
P:=inter_unique(droite(C,D),droite(E,F)):;
diam:=exinscrit(N,P,M)[1,1];
R:=(diam[1]-diam[0])/2;
On peut aussi directement calculer le rayon du cercle exinscrit de A,B,C avec la formule utilisée par giac
Code : Tout sélectionner
gen a2=distance2pp(B,C,contextptr),
b2=distance2pp(C,A,contextptr),
c2=distance2pp(A,B,contextptr); // distances au carré
gen a=exinscrit?-sqrt(a2,contextptr):sqrt(a2,contextptr);
gen b=sqrt(b2,contextptr);
gen c=sqrt(c2,contextptr);
gen I=normal((a*A+b*B+c*C)/(a+b+c),contextptr); // centre du cercle
gen AB(B-A), AC(C-A);
gen surface=re(AB,contextptr)*im(AC,contextptr)-im(AB,contextptr)*re(AC,contextptr);
gen r=normal(surface/(a+b+c),contextptr); // rayon
Re: cercles tangents à 3 droites
Publié : lun. juin 18, 2012 5:50 pm
par alb
C'est très rapide maintenant:
u:=20;v:=25; // 20 et 25 n'ont pas l'air de ralentir
A:=point(u,a):;B:=point(v,b):;C:=point(u,c):;D:=point(v,d):;E:=point(u,ee):;F:=point(v,f):;
M:=inter_unique(droite(A,B),droite(C,D)):;
N:=inter_unique(droite(A,B),droite(E,F)):;
P:=inter_unique(droite(C,D),droite(E,F)):;
diam:=exinscrit(N,P,M)[1,1] // en 1.6s
R:=(diam[1]-diam[0])/2; // en 0.46s c'est un complexe ?
abs(diam[1]-diam[0])/2; // réponse: Undef/Unsigned Inf encountered in limit en 2.68s / fait planter
write("rayon",R) // la formule est impressionnante !
Re: cercles tangents à 3 droites
Publié : lun. juin 18, 2012 9:34 pm
par alb
Je me suis demandé pendant un bout de temps d'où provenait l'erreur dans un script:
ee:=4;f:=3
puis plus loin j'avais écrit
25ee-20f
au lieu de 40 c'était 7.5e-19 cad evalf(25*10^-20*f)
Moralité: ne pas prendre ee comme nom de variable !
Re: cercles tangents à 3 droites
Publié : mar. juin 19, 2012 5:37 am
par alb
J'ai aussi essayé avec la formule de giac. Voir la fin de ce topic
http://www.ilemaths.net/forum-sujet-498 ... msg4216010 (post du 19-06-12 à 07:33)
Re: cercles tangents à 3 droites
Publié : mar. juin 19, 2012 6:11 am
par parisse
en effet, ee est aussi utilise comme separateur mantisse/exposant, le * est donc obligatoire pour 20*ee.