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.