unitrand()

Tout ce qui concerne le langage Asymptote. Ce langage est utilisable sur le forum via les balises asy.
[participation réservée aux membres inscrits]
Règles du forum
Merci de soigner la rédaction de vos messages et de consulter ce sujet avant de poster. Pensez également à utiliser la fonction recherche du forum.
zariski63
Utilisateur éprouvé
Utilisateur éprouvé
Messages : 445
Inscription : jeudi 14 octobre 2010, 09:20
Statut actuel : Enseignant
Localisation : Clermont-Ferrand

unitrand()

Message non lu par zariski63 »

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
Pièces jointes
pavage.pdf
(4.36 Kio) Téléchargé 176 fois
pavage.asy
(752 octets) Téléchargé 196 fois
rebouxo
Modérateur honoraire
Modérateur honoraire
Messages : 6962
Inscription : mercredi 15 février 2006, 13:18
Localisation : le havre

Re: unitrand()

Message non lu par rebouxo »

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.
zariski63
Utilisateur éprouvé
Utilisateur éprouvé
Messages : 445
Inscription : jeudi 14 octobre 2010, 09:20
Statut actuel : Enseignant
Localisation : Clermont-Ferrand

Re: unitrand()

Message non lu par zariski63 »

Je me doutais d un truc de ce style....
Merci beaucoup !!!!