unitrand()

Tout ce qui concerne l'utilisation ou l'installation d'Asymptote.

Modérateur: gdm_asy

Règles du forum
Merci d'éviter le style SMS dans vos messages et de penser à utiliser la fonction Recherche avant de poster un message. Pour joindre des fichiers à vos messages, consulter ce sujet.
> Penser à utiliser les balises Code pour poster du code.

unitrand()

Messagepar zariski63 » Dimanche 21 Janvier 2018, 17:40

Bonsoir !
Je n'arrive pas à comprendre pourquoi mes hexagones ne changent pas de couleur à chaque compilation alors qu'à priori cette couleur varie aléatoirement ...
Surement bête mais ça m'échappe.

Merci
Fichiers joints
pavage.pdf
(4.36 Kio) Téléchargé 25 fois
pavage.asy
(752 Octets) Téléchargé 21 fois
zariski63
Kilo-utilisateur
 
Messages: 243
Inscription: Jeudi 14 Octobre 2010, 08:20
Statut actuel: Actif et salarié | Enseignant

Publicité

Re: unitrand()

Messagepar rebouxo » Dimanche 21 Janvier 2018, 22:49

Bon un classique, il faut initialiser la graine. Asymptote a pris le parti du C, qui n'initialise pas la graine, ou plus exactement elle est initialisée toujours avec le même nombre (0 ?). La commande est srand(), et elle attend un entier, traditionnellement on fait appelle à l'heure du système et là c'est la commande seconds() qui renvoie un entier. Voili, voilou c'est joli.
Donc, cela donne :

Code: Tout sélectionner
settings.outformat="pdf" ;
import geometry;

unitsize(1cm);

real a=1;
pair pO=(0,0);
picture pic;


path polygone_regulier(int n)
{
  guide chemin;
  for (int i=1; i<=n; ++i)
    chemin=chemin--rotate((i-1)*360/n)*(a,0);
  return chemin--cycle;
}

// le motif
path motif=polygone_regulier(6);

srand(seconds()) ;

// et une double boucle pour "paver" suivant (Ox) et suivant (Oy)
real q=sqrt(3);
int n=5,m=5,j=0;
for(int i=0; i<n; ++i)
  {
  for(int j=0; j<m; ++j)
  {
    real r = unitrand() ;
    real g = unitrand() ;
    real b = 1 - g - r ;
    write(r,g,b) ;
    filldraw(shift((3*a)*i,q*j)*motif,
        //unitrand()*red+unitrand()*green+unitrand()*blue);
    r*red+g*green+b*blue);
    }
  }
for(int i=0; i<n; ++i)
  {
   for(int j=0; j<m; ++j)
   {
     real r = unitrand() ;
     real g = unitrand() ;
     real b = 1 - g - r ;
     write(r,g,b) ;
   filldraw(shift((3*a)*i+1.5*a,q*j+0.5q)*motif,
           r*red+g*green+b*blue);
   //unitrand()*red+unitrand()*green+unitrand()*blue);
   }
  }
A line is a point that went for a walk. Paul Klee
Par solidarité, pas de MP
rebouxo
Modérateur
 
Messages: 6851
Inscription: Mercredi 15 Février 2006, 13:18
Localisation: le havre
Statut actuel: Actif et salarié | Enseignant

Re: unitrand()

Messagepar zariski63 » Dimanche 21 Janvier 2018, 23:06

Je me doutais d un truc de ce style....
Merci beaucoup !!!!
zariski63
Kilo-utilisateur
 
Messages: 243
Inscription: Jeudi 14 Octobre 2010, 08:20
Statut actuel: Actif et salarié | Enseignant


Retourner vers Asymptote

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 2 invités