Problème de struct

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.

Problème de struct

Messagepar rebouxo » Mercredi 14 Juin 2017, 09:43

Bonjour tout le monde,
J'ai voulu refaire (je ne trouvé pas les images correspondantes) les pochettes (du moins l'extérieure) d'album de Kratwerk. Celles-ci sont toutes identiques aux couleurs du fond, des personnages, de l'ombre et éventuellement de la tête. J'ai fait une première version sans struct et je me suis dit que cela devait bien rentré dans le cadre des struct. J'ai donc codé, et j'ai un problème de passage d'arguments (je pense). En effet tout fonctionne, les personnages sont aux bons endroits, ils sont correctement représentés, sauf, leurs couleurs qui restent désespérément noire.

Est-ce que quelqu'un a une idée de comment je pourrais gérer ce petit problème (et éventuellement me dire quelles âneries j'ai faites).

Code: Tout sélectionner
settings.outformat="pdf" ;
import graph ;
import math ;
import geometry ;
usepackage("calrsfs") ; 
import interpolate ;
import animate ;

animation K ;

struct Musicien
{
  // dimension des blocs
  real l = 0.3 ;
  // Epaisseur de l'ombre
  real ep = 0.075 ;
  // Position sur l'image
  pair pos ;
  // Couleur
  pen colCorp  ;
  pen colOmbre ;
  pen colTete  ;
 
  // matrice des positions des blocs
  int[][] m ;
  void operator init(int[][] tab, pair ref, pen p1, pen p2, pen p3)
  {
    this.m = tab        ;
    this.pos = ref      ;
    this.colCorp = p1   ;
    this.colOmbre = p2  ;
    this.colTete = p3   ;
  }
  path carre =  (0,0)--(l,0)--(l,l)--(0,l)--cycle ;
 
    path[] personnage()
  {
    path[] c ;
    for(int y = 0 ;  y < 13 ; ++y)
      {
   for(int x = 0 ; x < 9 ; ++x)
     {
       if(this.m[y][x] == 1)
         {
      path d = shift(x*l,y*l)*carre ;
      c = c^^d ;
         }
     }
      }
    return shift(-l*8,l*13)*reflect((l*4.5,0),(l*4.5,l*6))*rotate(180)*c;
  }
  void affiche()
  {
    fill(shift(pos.x-ep,pos.y+ep)*personnage(),this.colOmbre)   ;
    fill(shift(pos.x,pos.y)*personnage(),this.colCorp)          ;
    fill(shift(pos.x+l*4,pos.y+l*12)*carre,this.colTete)        ;
  }
  void print()
  {
    write("Via la classe Musicien") ;
    write("Couleur du corps : ",this.colCorp) ;
    write("Couleur de l'ombre : ",this.colOmbre) ;
    write("Couleur de la tete : ",this.colTete) ;
  }
}

struct Cover
{
  // Dimension de l'image
  real L = 13    ;
  real l = 0.3   ;
  pen colFond    ;
  pen colCorpM   ;
  pen colOmbreM  ;
  pen colTeteM   ;
  int[][] ralf =
    {
      {0,0,0,1,0,0,0,0,0},
      {0,1,0,1,0,0,0,0,0},
      {0,1,1,1,1,0,0,0,0},
      {0,0,1,1,1,1,0,0,0},
      {0,0,0,1,1,0,1,0,0},
      {1,1,1,1,1,1,1,1,1},
      {0,0,0,1,1,0,0,0,0},
      {0,0,0,1,1,0,0,0,0},
      {0,0,0,1,1,0,0,0,0},
      {0,0,0,1,1,0,0,0,0},
      {0,0,0,1,1,0,0,0,0},
      {0,0,0,1,1,0,0,0,0},
      {0,0,0,1,0,0,0,0,0},
    } ;
  int[][] hennig =
    {
      {0,0,0,1,0,0,0,0,0},
      {0,0,0,1,0,0,0,0,0},
      {0,0,1,1,1,0,0,0,0},
      {0,0,1,1,1,0,0,0,0},
      {0,0,0,1,1,1,0,0,0},
      {1,1,1,1,1,1,1,1,1},
      {0,0,0,1,1,0,0,0,0},
      {0,0,0,1,1,0,0,0,0},
      {0,0,0,1,1,0,0,0,0},
      {0,0,0,1,1,0,0,0,0},
      {0,0,0,1,1,0,0,0,0},
      {0,0,0,1,0,0,0,0,0},
      {0,0,0,0,1,0,0,0,0},
    } ;
  int[][] fritz =
    {
      {0,0,0,0,1,0,0,0,0},
      {0,0,0,0,1,0,0,0,0},
      {0,0,0,1,1,1,0,0,0},
      {0,0,0,1,1,1,0,0,0},
      {0,0,1,0,1,0,0,0,0},
      {1,1,1,1,1,1,1,1,1},
      {0,0,0,1,1,0,0,0,0},
      {0,0,0,1,1,0,0,0,0},
      {0,0,0,1,1,0,0,0,0},
      {0,0,0,1,1,0,0,0,0},
      {0,0,0,1,1,0,0,0,0},
      {0,0,0,0,1,0,0,0,0},
      {0,0,0,1,1,0,0,0,0},
    } ;
  int[][] falk =
    {
      {0,0,0,0,1,0,0,0,0},
      {0,0,0,0,1,0,0,0,0},
      {0,0,0,1,1,1,0,0,0},
      {0,0,0,1,1,1,0,0,0},
      {0,0,0,1,1,0,0,0,0},
      {1,1,1,1,1,1,1,1,1},
      {0,0,0,1,1,0,0,0,0},
      {0,0,0,1,1,0,0,0,0},
      {0,0,0,1,1,0,0,0,0},
      {0,0,0,1,1,0,0,0,0},
      {0,0,0,1,1,0,0,0,0},
      {0,0,0,1,0,0,0,0,0},
      {0,0,0,0,1,0,0,0,0},
    } ;

  void operator init(pen p1, pen p2, pen p3, pen p4)
  {
    this.colFond   = p1  ;
    this.colCorpM  = p2  ;
    this.colOmbreM = p3  ;
    this.colTeteM  = p4  ;
  }   
 
  path fond = (0,0)--(L,0)--(L,L)--(0,L)--cycle ;

  pen cc = this.colCorpM  ;
  pen co = this.colOmbreM ;
  pen ct = this.colTeteM  ;
 
  Musicien Ralf= Musicien(ralf,(0.6,L/2-6.5*l),cc,co,ct) ;
  Musicien Hennig=Musicien(hennig,(12*0.3,L/2-6.5*l),cc,co,ct) ;
  Musicien Fritz=Musicien(fritz,(22*0.3,L/2-6.5*l),cc,co,ct) ;
  Musicien Falk=Musicien(falk,(32*0.3,L/2-6.5*l),cc,co,ct) ;

  void print()
  {
    write("Via la classe Cover") ;
    write("Couleur du corps : ",this.colCorpM) ;
    write("Couleur de l'ombre : ",this.colOmbreM) ;
    write("Couleur de la tete : ",this.colTeteM) ;
  }
 
  void afficheCover()
    {
      fill(fond,this.colFond) ;
      Ralf.affiche()   ;
      Ralf.print()     ;
      Hennig.affiche() ;
      Fritz.affiche()  ;
      Falk.affiche()   ;
      this.print() ;
     
    } 
}

unitsize(1cm,1cm) ;

Cover cd1 =  Cover(yellow,blue,white,red) ;

cd1.afficheCover() ;


Edit : j'ai dépassé la longueur max avec les balises asy, je me suis rabattu sur les balises codes.
Olivier
A line is a point that went for a walk. Paul Klee
Par solidarité, pas de MP
rebouxo
Modérateur
 
Messages: 6729
Inscription: Mercredi 15 Février 2006, 13:18
Localisation: le havre
Statut actuel: Actif et salarié | Enseignant

Publicité

Re: Problème de struct

Messagepar OG » Jeudi 15 Juin 2017, 14:49

Cher Olivier

J'avoue, je n'y connais rien en structure. Mais il semble que le morceau de code qui définit tes musiciens
soit exécuté avant le init, donc les variables "couleurs" sont les valeurs par défaut ("pen" défaut, noir donc).
Il faudrait à l'intérieur de ta structure "cover" une routine qui renvoie un personnage
ou inclure (solution pas très structurée) comme je l'ai fait la définition de tes musiciens dans afficheCover()

Code: Tout sélectionner
     void afficheCover()
        {
        pen cc = this.colCorpM  ;
        pen co = this.colOmbreM ;
        pen ct = this.colTeteM  ;
        Musicien Ralf= Musicien(ralf,(0.6,L/2-6.5*l),cc,co,ct) ;
        Musicien Hennig=Musicien(hennig,(12*0.3,L/2-6.5*l),cc,co,ct) ;
        Musicien Fritz=Musicien(fritz,(22*0.3,L/2-6.5*l),cc,co,ct) ;
        Musicien Falk=Musicien(falk,(32*0.3,L/2-6.5*l),cc,co,ct) ;
          fill(fond,this.colFond) ;
          Ralf.affiche()   ;
          Ralf.print()     ;
          Hennig.affiche() ;
          Fritz.affiche()  ;
          Falk.affiche()   ;
          this.print() ;
        }
    }



Qui pour faire un zeppelin en 3D avec Asymptote :)

O.G.
OG
Modérateur
 
Messages: 2184
Inscription: Lundi 12 Mars 2007, 11:20
Localisation: Rouen
Statut actuel: Actif et salarié | Maître de conférence

Re: Problème de struct

Messagepar rebouxo » Jeudi 15 Juin 2017, 21:26

Merci Olivier,
Je vais regarder ton code et ton idée. Merci pour la piste.
Ah non, pour led zep, là je laisse tomber. :D

Olivier
A line is a point that went for a walk. Paul Klee
Par solidarité, pas de MP
rebouxo
Modérateur
 
Messages: 6729
Inscription: Mercredi 15 Février 2006, 13:18
Localisation: le havre
Statut actuel: Actif et salarié | Enseignant


Retourner vers Asymptote

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité