un lieu en 3D

Utilisation de Xcas

Modérateur : xcasadmin

jmmeny
Messages : 36
Inscription : dim. févr. 03, 2008 8:41 pm

un lieu en 3D

Message par jmmeny » sam. déc. 06, 2008 5:50 pm

J'aimerais faire un lieu en 3D avec Xcas,
cf fin du fichier :
http://math.univ-lyon1.fr/irem/IMG/pdf/partent-2.pdf



est ce qu'il y aurait mieux ? (du point de vue de la méthode utilisée mais également du point de vue de l'affichage du résultat)
Dernière modification par jmmeny le dim. déc. 07, 2008 6:03 pm, modifié 1 fois.

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

Message par parisse » sam. déc. 06, 2008 8:25 pm

Tout d'abord, si on veut suivre l'esprit de ce que vous avez fait en 2-d avec geogebra.
En 2-d on ouvre un niveau de géométrie, on clique un point ou on définit A:=point(0,0) au niveau 1, puis on tape dans le niveau 2
test:=floor(abscisse(A))^2+floor(ordonnee(A))^2==4
puis dans le niveau 3:
trace(M:=ifte(test,A,0))
Ensuite on passe en mode pointeur, et on bouge A à la souris.
En 3-d on peut faire la même chose, mais ca ne donne pas des résultats aussi facilement: on ouvre un niveau de géo 3-d puis
A:=point(2,0.2,0.3)
test:=floor(abscisse(A))^2+floor(ordonnee(A))^2+floor(cote(A))^2==4
trace(M:=ifte(test,A,0))
Puis on passe en mode pointeur et on fait bouger A (A bouge dans le plan indiqué en pointillé, la molette de la souris permet de faire changer ce plan).
Votre programme donne des résultats beaucoup plus exploitables, mais il est un peu lent. Voici une version légèrement modifiée qui est plus rapide

Code : Tout sélectionner

partiedulieu():={
  local a,b,c,dx,dy,dz,resa,resb,resc;
  dx:=0.1; dy:=0.1; dz:=0.1;
  resa:=NULL;
  for (a:=0;a<=3;a+=dx){
    resb:=NULL;
    for (b:=0;b<=3;b+=dy){
      resc:=NULL;
      for (c:=0;c<3;c+=dz){
        if (floor(a)^2+floor(b)^2+floor(c)^2=4)
          resc:=resc,point(a,b,c,affichage=epaisseur_point_4);
      }
      resb:=resb,resc;
    }
    resa:=resa,[resb];
  }
  return resa;
}
:;
Ce programme est un peu plus rapide que le votre parce qu'à chaque fois que l'on modifie une liste ou une séquence elle est recopiée entièrement (sauf si on utilise =< au lieu de := mais il faut alors connaitre la taille de la liste), l'utilisation de variables intermédiaires évite d'avoir des listes trop longues à recopier à chaque fois dans la boucle intérieure.
Je vous conseille le mode par défaut de visualisation 3-d (pas le mode ortho). Si vous n'arrivez pas à visualiser comme vous le voulez, essayez dans un niveau normal (pas de géométrie)
gl_quaternion=[-0.4932,-0.29883,-0.49739,0.64812],partiedulieu()
vous aurez un affichage qui me semble assez pertinent.

Répondre