Géométrie 3D exacte

Utilisation de Xcas

Modérateur : xcasadmin

Répondre
jse
Messages : 6
Inscription : jeu. nov. 15, 2007 12:08 pm

Géométrie 3D exacte

Message par jse » jeu. nov. 15, 2007 2:28 pm

Bonjour,

Je fais mes premières armes avec Xcas sur un problème de géométrie 3D.
Pr simplifier, il s'agit de modéliser le trajet d'un rayon lumineux se réfléchissant sur un miroir sphérique lorsque l'axe optique de ce miroir bouge (en fait je cherche à vérifier une technique de collimation de télescope - mais c'est une autre histoire ...).

En mode exact - sans calcul numérique donc, si j'ai bien compris - les équations grossissent assez rapidement et le système finit par remplacer leur affichage par le mot "Done".

Qu'est ce que cela signifie ? Qu'il n'a pas été en mesure de les calculer ? Que le résultat est trop "gros"/"complexe" pr être affiché ?
Cela implique t il que je doive me contenter d'un calcul numérique (approché) pr mon problème

Ci-joint une copie de la session.

Merci pr votre aide et navré si ma question est triviale : c'est la première fois que j'utilise un logiciel de calcul de formel.

JSE

// xcas version=0.7.2 fontsize=14
// fltk 7Fl_Tile 22 40 1143 615 14
[
// fltk N4xcas6FigureE 22 40 1143 614 14 landscape=0 history=0.24584 geo=0.55381 mouse_param=0.20035
// fltk N4xcas12History_PackE 24 -286 261 940 14
[
// fltk 7Fl_Tile 42 -286 243 46 14
[
// fltk N4xcas19Multiline_Input_tabE 42 -286 243 24 14
O:=point(1,0,0)
,
// fltk N4xcas10Log_OutputE 42 -262 243 1 14

,
// fltk N4xcas10Gen_OutputE 42 -261 243 21 14
pnt(pnt[[1,0,0],0,"O"])
]
,
// fltk 7Fl_Tile 42 -238 243 46 14
[
// fltk N4xcas19Multiline_Input_tabE 42 -238 243 24 14
assume(a=[-0.8,-10.0,10.0])
,
// fltk N4xcas10Log_OutputE 42 -214 243 1 14

,
// fltk N4xcas10Gen_OutputE 42 -213 243 21 14
parameter(a,-10.0,10.0,-0.8)
]
,
// fltk 7Fl_Tile 42 -190 243 46 14
[
// fltk N4xcas19Multiline_Input_tabE 42 -190 243 24 14
C:=point(1,cos(a),sin(a))
,
// fltk N4xcas10Log_OutputE 42 -166 243 1 14

,
// fltk N4xcas10Gen_OutputE 42 -165 243 21 14
pnt(pnt[[1,cos(a),sin(a)],0,"C"])
]
,
// fltk 7Fl_Tile 42 -142 243 62 14
[
// fltk N4xcas19Multiline_Input_tabE 42 -142 243 24 14
M:=sphere(C,10)
,
// fltk N4xcas10Log_OutputE 42 -118 243 1 14

,
// fltk 9Fl_Scroll 42 -117 243 37 14
[
// fltk N4xcas10Gen_OutputE 42 -117 310 21 14
pnt(pnt[hypersphere([1,cos(a),sin(a)],10),0,"M"])
,
// fltk 12Fl_Scrollbar 42 50 243 14 14
[]
,
// fltk 12Fl_Scrollbar 285 27 16 23 14
[]
]
]
,
// fltk 7Fl_Tile 42 -78 243 62 14
[
// fltk N4xcas19Multiline_Input_tabE 42 -78 243 24 14
equation(M)
,
// fltk N4xcas10Log_OutputE 42 -54 243 1 14

,
// fltk 9Fl_Scroll 42 -53 243 37 14
[
// fltk N4xcas10Gen_OutputE 42 -53 406 21 14
x^2-2*x+y^2-2*y*cos(a)+z^2-2*z*sin(a)+cos(a)^2+sin(a)^2-99=0
,
// fltk 12Fl_Scrollbar 42 66 243 14 14
[]
,
// fltk 12Fl_Scrollbar 285 43 16 23 14
[]
]
]
,
// fltk 7Fl_Tile 42 -14 243 46 14
[
// fltk N4xcas19Multiline_Input_tabE 42 -14 243 24 14
D:=droite(point(0,1,0),point(1,1,0)
,
// fltk N4xcas10Log_OutputE 42 10 243 1 14

,
// fltk N4xcas10Gen_OutputE 42 11 243 21 14
pnt(pnt[line[[0,1,0],[1,1,0]],0,"D"])
]
,
// fltk 7Fl_Tile 42 34 243 46 14
[
// fltk N4xcas19Multiline_Input_tabE 42 34 243 24 14
equation(D)
,
// fltk N4xcas10Log_OutputE 42 58 243 1 14

,
// fltk N4xcas10Gen_OutputE 42 59 243 21 14
-y+1=0,-z=0
]
,
// fltk 7Fl_Tile 42 82 243 62 14
[
// fltk N4xcas19Multiline_Input_tabE 42 82 243 24 14
P:=inter(D,M)[0]
,
// fltk N4xcas10Log_OutputE 42 106 243 1 14

,
// fltk 9Fl_Scroll 42 107 243 37 14
[
// fltk N4xcas10Gen_OutputE 42 107 479 21 14
pnt(pnt[[sqrt(-(1-cos(a))*(1-cos(a))-(-(sin(a)))*(-(sin(a)))+100)+1,1,0],0,"P"])
,
// fltk 12Fl_Scrollbar 42 130 243 14 14
[]
,
// fltk 12Fl_Scrollbar 285 107 16 23 14
[]
]
]
,
// fltk 7Fl_Tile 42 146 243 62 14
[
// fltk N4xcas19Multiline_Input_tabE 42 146 243 24 14
N:=droite(C,P)
,
// fltk N4xcas10Log_OutputE 42 170 243 1 14

,
// fltk 9Fl_Scroll 42 171 243 37 14
[
// fltk N4xcas10Gen_OutputE 42 171 614 21 14
pnt(pnt[line[[1,cos(a),sin(a)],[sqrt(-(1-cos(a))*(1-cos(a))-(-(sin(a)))*(-(sin(a)))+100)+1,1,0]],0,"N"])
,
// fltk 12Fl_Scrollbar 42 194 243 14 14
[]
,
// fltk 12Fl_Scrollbar 285 171 16 23 14
[]
]
]
,
// fltk 7Fl_Tile 42 210 243 46 14
[
// fltk N4xcas19Multiline_Input_tabE 42 210 243 24 14
equation(N)
,
// fltk N4xcas10Log_OutputE 42 234 243 1 14

,
// fltk N4xcas10Gen_OutputE 42 235 243 21 14
Done
]
,
// fltk 7Fl_Tile 42 258 243 63 14
[
// fltk N4xcas19Multiline_Input_tabE 42 258 243 24 14
simplify(equation(N))
,
// fltk N4xcas10Log_OutputE 42 282 243 18 14
Evaluation time: 2£
,
// fltk N4xcas10Gen_OutputE 42 300 243 21 14
Done
]
,
// fltk 7Fl_Tile 42 323 243 62 14
[
// fltk N4xcas19Multiline_Input_tabE 42 323 243 24 14
parameq(N)
,
// fltk N4xcas10Log_OutputE 42 347 243 1 14

,
// fltk 9Fl_Scroll 42 348 243 37 14
[
// fltk N4xcas10Gen_OutputE 42 348 587 21 14
[t*sqrt(-(1-cos(a))*(1-cos(a))-(-(sin(a)))*(-(sin(a)))+100)+1,-t*cos(a)+t+cos(a),-t*sin(a)+sin(a)]
,
// fltk 12Fl_Scrollbar 42 371 243 14 14
[]
,
// fltk 12Fl_Scrollbar 285 348 16 23 14
[]
]
]
,
// fltk 7Fl_Tile 42 387 243 46 14
[
// fltk N4xcas19Multiline_Input_tabE 42 387 243 24 14
E:=rotation(N,pi,D)
,
// fltk N4xcas10Log_OutputE 42 411 243 1 14

,
// fltk N4xcas10Gen_OutputE 42 412 243 21 14
Done
]
,
// fltk 7Fl_Tile 42 435 243 46 14
[
// fltk N4xcas19Multiline_Input_tabE 42 435 243 24 14
equation(E)
,
// fltk N4xcas10Log_OutputE 42 459 243 1 14

,
// fltk N4xcas10Gen_OutputE 42 460 243 21 14
Done
]
,
// fltk 7Fl_Tile 42 483 243 46 14
[
// fltk N4xcas19Multiline_Input_tabE 42 483 243 24 14
parameq(E)
,
// fltk N4xcas10Log_OutputE 42 507 243 1 14

,
// fltk N4xcas10Gen_OutputE 42 508 243 21 14
Done
]
,
// fltk 7Fl_Tile 42 531 243 46 14
[
// fltk N4xcas19Multiline_Input_tabE 42 531 243 24 14
Q:=inter(E,plan(x=0))
,
// fltk N4xcas10Log_OutputE 42 555 243 1 14

,
// fltk N4xcas10Gen_OutputE 42 556 243 21 14
Done
]
,
// fltk 7Fl_Tile 42 579 243 46 14
[
// fltk N4xcas19Multiline_Input_tabE 42 579 243 24 14
coordonnees(Q)
,
// fltk N4xcas10Log_OutputE 42 603 243 1 14

,
// fltk N4xcas10Gen_OutputE 42 604 243 21 14
Done
]

parisse
Messages : 5739
Inscription : mar. déc. 20, 2005 4:02 pm
Contact :

Message par parisse » ven. nov. 16, 2007 1:42 pm

bonjour,

quelques remarques:
- plutot que d'envoyer la session xcas complete dans le cas d'une figure, vous pouvez envoyer uniquement les lignes de commandes (qu'on obtient en cliquant sur le bouton Save de la figure). Ici ca donne

Code : Tout sélectionner

O:=point(1,0,0);
assume(a=[-0.8,-10.0,10.0]);
C:=point(1,cos(a),sin(a));
M:=sphere(C,10);
equation(M);
D:=droite(point(0,1,0),point(1,1,0));
equation(D);
P:=inter(D,M)[0];
N:=droite(C,P);
equation(N);
simplify(equation(N));
parameq(N);
E:=rotation(N,pi,D);
equation(E);
parameq(E);
Q:=inter(E,plan(x=0));
coordonnees(Q);
- dans votre copie de session, il semble que c'est une figure 2-d au lieu de 3-d qui était ouverte, est-ce un bug de xcas ou avez-vous ouvert une figure 2-d au lieu de 3-d?

Concernant votre question: dans une figure, les résultats trop gros ne sont pas affichés car ils seraient inutilisables dans cette interface. Mais vous pouvez bien sur les affecter a une variable et effectuer dans un niveau de calcul formel les calculs souhaités. Par exemple si vous tapez dans une ligne de commande en-dehors de la figure
coordonnees(Q)
vous aurez l'affichage des coordonnées en fonction de a. Ensuite vous pouvez appliquer des opérations de simplification, ce qui peut marcher... ou pas. Par exemple en sélectionnant à la souris un morceau de la réponse et avec le menu Réécriture. Ainsi il semble que la bonne manip pour simplifier soit ici
cQ:=trigcos(coordonnees(Q))
qui renvoie
[0,
((-(sqrt(2)))*cos(a)^2+(-49*sqrt(2))*cos(a)+25*sqrt(2)+(-cos(a)+1)*sqrt(cos(a)+49))/((-(sqrt(2)))*cos(a)-24*sqrt(2)),
((sqrt(2)*cos(a)+49*sqrt(2)+sqrt(cos(a)+49))*sin(a))/(sqrt(2)*cos(a)+24*sqrt(2))
]
j'ai testé avec evalf(cQ) qui concorde avec evalf(coordonnees(Q)) (pour a=-0.8 ).
Attention, les simplifications effectuées peuvent devenir inexactes si a s'éloigne beaucoup de -0.8 car le choix de la racine carrée symbolique par exemple est fait pour être positif si a=-0.8, il le restera donc dans un voisinage mais pas forcément pour a quelconque. Pour les mêmes raisons de choix, il est judicieux de faire un evalf comme ci-dessus pour s'assurer que la simplification est correcte dès que l'on quitte les fractions rationnelles (de même il vaut mieux éviter simplify si une opération comme ratnormal ou normal suffit à simplifier).

jse
Messages : 6
Inscription : jeu. nov. 15, 2007 12:08 pm

Message par jse » ven. nov. 16, 2007 7:25 pm

Bonsoir et merci pr votre réponse.

Tout est bcp plus clair maintenant; je n'avais pas réalisé que l'on pouvait travailler sur plusieurs niveaux avec les mêmes données.

Je n'ai plus qu'à verifier maintenant que lorsque a varie de 0 à 2pi, Q décrit bien un cercle dans le plan x=0 (c'est l'hypothèse que je cherche à vérifier).
Mais là, si j'ai bien compris, on entre ds la partie non systématique des simplifications..

Merci pr vos explications

JSE

parisse
Messages : 5739
Inscription : mar. déc. 20, 2005 4:02 pm
Contact :

Message par parisse » ven. nov. 16, 2007 8:32 pm

bon, en regardant de plus pres, la simplification des coordonnees doit etre valable partout car la seule extraction de racine c'est sqrt(cos(a)+49) et il n'y a aucun risque de mauvais choix de branche.
Apres si on pose
res:=trigcos(normal(coordonnees(Q)))
(avec Q:=inter(E,plan(x=0))[0];)
alors plotparam(res[1..2],a=0..2*pi,tstep=0.01)
ressemble à un cercle, mais je n'arrive pas à démontrer que c'en est un (et en fait je pense plutot que ca n'en est pas un), je n'ai pas essayé avec une ellipse.

jse
Messages : 6
Inscription : jeu. nov. 15, 2007 12:08 pm

Message par jse » lun. nov. 19, 2007 8:03 am

> Apres si on pose
> res:=trigcos(normal(coordonnees(Q)))
> (avec Q:=inter(E,plan(x=0))[0]
> alors plotparam(res[1..2],a=0..2*pi,tstep=0.01)
> ressemble à un cercle, mais je n'arrive pas à démontrer que c'en est un > (et en fait je pense plutot que ca n'en est pas un), je n'ai pas essayé avec > une ellipse.

Je ne suis pas sur non plus que ce soit un cercle !
C'est juste une hypothèse issue
- d'une tracé numérique (avec la fonction "lieu")
- de l'expérience (avec un vrai miroir !)

Il est possible (probable) que ce soit un cercle dans le plan perpendiculaire à la droite E et, donc, une ellipse dans le plan x=0.
Je vais creuser cela.

En tout cas, cela m'aura permis de découvrir les possibilités d'un logiciel tel que Xcas, que j'ignorais totalement...

Merci pr votre aide

Bonne journée

jse

parisse
Messages : 5739
Inscription : mar. déc. 20, 2005 4:02 pm
Contact :

Message par parisse » lun. nov. 19, 2007 9:11 am

Sauf erreur, l'equation est de degre 8 en Y et Z les coordonnees de Q, et ca n'est pas l'equation d'un cercle meme si ca y ressemble beaucoup graphiquement. voici commet je l'obtiens

Code : Tout sélectionner

res:=trigcos(normal(coordonnees(Q))) ;
y:=normal(halftan(res[1])) ;
z:=normal(halftan(res[2])) ;
y0:=subst(y,[tan(a/2),sqrt(24*tan(a/2)^4+49*tan(a/2)^2+25)],[A,T]) ;
z0:=subst(z,[tan(a/2),sqrt(24*tan(a/2)^4+49*tan(a/2)^2+25)],[A,T]) ;
P1:=numer(Y-y0) ;
P2:=numer(Z-z0) ;
P3:=T^2-24*A^4+49*A^2+25 ;
Q1:=factor(resultant(P1,P3,T)) ;
Q2:=factor(resultant(P2,P3,T)) ;
eq:=factor(resultant(Q1,Q2,A) );
c'est-a-dire que je remplace les cos/sin par des tan de l'angle sur 2 que j'appelle A, puis je remplace la racine carree par une variable T, j'ai donc 3 polynomes qui s'annulent P1, P2, P3 ou Y et Z designent les coordonnees du point Q. En prenant les resultant j'elimine les variables T et A ce qui me donne l'equation cartesienne du lieu des points Q, elle a 2 facteurs (en-dehors du facteur constant)
eq2:=(subst(eq[2],[Y,Z],res[1..2]);
plotfunc(eq2,a=0..2*pi);
montre que ce n'est pas ce facteur
eq3:=(subst(eq[3],[Y,Z],res[1..2]);
plotfunc(eq3,a=0..2*pi);
semble numeriquement indiquer que c'est eq3 l'equation, ce qui se confirme par
trigcos(ratnormal(subst(eq[3],[Y,Z],res[1..2])));
qui renvoie 0.
L'equation cartesienne rationnelle est donc
529*Y^8+184*Y^7+2208*Y^6*Z^2-6980*Y^6+568*Y^5*Z^2+
8392*Y^5+3454*Y^4*Z^4+(-16956*Y^4)*Z^2+19270*Y^4+
584*Y^3*Z^4+17984*Y^3*Z^2-57464*Y^3+2400*Y^2*Z^6+
(-12576*Y^2)*Z^4+8984*Y^2*Z^2+58876*Y^2+200*Y*Z^6+
9584*Y*Z^4+(-20184*Y)*Z^2-28040*Y+625*Z^8-2600*Z^6-1046*Z^4+
7396*Z^2+5233
Elle est irreductible sur les rationnels et tres probablement sur C[Y,Z], ca permettrait de montrer que ca ne peut pas etre une ellipse (xcas ne sait pas encore le faire...)
En tout cas, c'est tres interessant de tester un peu de calcul formel sur un probleme reel!

jse
Messages : 6
Inscription : jeu. nov. 15, 2007 12:08 pm

Message par jse » lun. nov. 19, 2007 8:11 pm

Bonsoir,

J'ai repris le problème en utilisant des constantes pr R, r et d.

En simplifiant systématiquement à coup de trigcos(trigcos(expr)), j'arrive à ces expressions pr les coordonnées de Q :

xQ = 0

yQ = (2*r*cos(a)-2)*sqrt(2*r*cos(a)+R^2-r^2-1)*d+2*R^2*r*cos(a)-R^2-2*r^3*cos(a)+4*r^2*cos(a)^2-2*r*cos(a))/(R^2-2*r^2+4*r*cos(a)-2)

zQ = (2*r*sqrt(2*r*cos(a)+R^2-r^2-1)*d*sin(a)+(2*R^2*r-2*r^3+4*r^2*cos(a)-2*r)*sin(a))/(R^2-2*r^2+4*r*cos(a)-2)

Je ne suis pas mathématicien mais, effectivement, cela ne ressemble pas vraiment à un cercle ni à une ellipse. Il semble que seul un tracé permette de se faire une idée...

A toutes fins utiles, j'ai placé ici :

http://pagesperso-orange.fr/legalet/astro/yuri.pdf

un petit mémorandum sur le sujet.

jse

jse
Messages : 6
Inscription : jeu. nov. 15, 2007 12:08 pm

Message par jse » mar. nov. 20, 2007 10:16 am

Bonjour,

J'ai un souci pr tracer la trajectoire de Q avec la forme paramétrique de ses coordonnees :

assume(d=1)
assume(r=1)
assume(R=5)
...
yQ:=trigcos(trigcos(ordonnee(Q)))
zQ:=trigcos(trigcos(cote(Q)))
plotparam([yQ,zQ],a=0..2*pi)

me répond "NULL" et n'affiche rien.

jse

PS: par ailleurs, comment fait on pour sauver le texte de l'intégralité d'une session ? Quand je fait Export as>xcas text au niveau du bandeau de session, seul un niveau est sauvé.

parisse
Messages : 5739
Inscription : mar. déc. 20, 2005 4:02 pm
Contact :

Message par parisse » mar. nov. 20, 2007 12:27 pm

Pouvez-vous me mailer la session ou le plotparam ne s'affiche pas?
Sinon, l'export a l'air d'oublier de sauvegarde les figures, je vais y remedier.

jse
Messages : 6
Inscription : jeu. nov. 15, 2007 12:08 pm

Message par jse » mar. nov. 20, 2007 1:10 pm

Je vous envoie cela

Répondre