Page 1 sur 1

Empilement de boules

Posté : sam. 6 oct. 2018, 11:15
par Fabrice
Bonjour Gaetan,
L'idée est de reproduire au format pdf la figure jointe en image. Cette figure va servir dans un énoncé de devoir surveillé, et il faut pouvoir compter aisément le nombre de boules. Le problème, c'est que mon ordinateur qui veillit ne sait plus compiler au delà d'un certain nombre de boules. Peux-tu faire la figure et la joindre en fichier ?
Merci beaucoup.
Fabrice

Code : Tout sélectionner

import solids;
import palette;
size(14cm,0);

currentlight=light(gray(0.4),specularfactor=3,viewport=false,
                   (-0.5,-0.25,0.45),
                   (0.5,-0.5,0.5),(0.5,0.5,0.75));

nslice=4*nslice;
surface s=surface(sphere(O,1));
for(int y=0; y<=4; ++y)
  for(int x=0; x<=4; ++x)
    for(int z=0; z<=4; ++z)	
   draw(shift(2x,2y,2z)*s,lightgrey);
Image

Re: Empilement de boules

Posté : sam. 6 oct. 2018, 11:59
par GM
Bonjour,

essaye de compiler ceci :

Code : Tout sélectionner

import three;
size(8cm,0);
currentlight.background=white;
currentprojection=orthographic(5,4,3);

int nx = 5, ny = 5, nz = 5;

draw(shift(-.5,-.5,-.5)*xscale3(2nx)*yscale3(2ny)*zscale3(2nz)*unitbox,blue);
for(int z=0; z<nz; ++z)
    for(int y=0; y<ny; ++y)
        for(int x=0; x<nx; ++x)
            draw(shift(2x,2y,2z)*unitsphere,
                 surfacepen=material(diffusepen=gray(0.5),
                                     emissivepen=blue+white,
                                     specularpen=black
                                    )
                );
Image

Re: Empilement de boules

Posté : dim. 7 oct. 2018, 08:50
par Fabrice
Salut Gaetan,
Merci beaucoup, la compilation est très rapide. Pourquoi mon code prenait temps de temps ?
Fabrice

Re: Empilement de boules

Posté : dim. 7 oct. 2018, 10:45
par GM
Sans ta ligne redéfinissant nslice, je pense que ton exemple compilait mais chaque sphère était définie par plus d'une centaine de patchs de bézier !!

Et tu aggravais le problème en quadruplant nslice.

Image

Dans la définition de unitsphere, on définit (apparemment, d'après ce que je vois dans Adobe Reader) une sphère par 8 patchs de Béziers : ce qui est un nombre plus raisonnable qui facilite la compilation au détriment d'une précision moindre mais qui n'est pas perceptible.