Annonce

>>> Bienvenue sur codelab! >>> Première visite ? >>> quelques mots sur codelab //// partage de liens //// une carte des membres//// (apéros) codelab


#16 2018-01-02 20:19:36 Re : draw with keyboard

Mushussu
membre
Lieu: Orléans
Date d'inscription: 2012-05-24
Messages: 784

Re: draw with keyboard



Bonsoir,

La position du dessin était dans le constructeur de la classe Dessin. Si tu veux le contrôler en dehors de la classe, il faut ajouter le paramètre de position au constructeur :

ArrayList<Dessin> dessins;
Dessin dessinEnCours;
PVector dimensionDessin, positionDessin;

void setup() {
  size(800, 600);
  dimensionDessin = new PVector(200, 200);
  positionDessin = new PVector(random(20, width - 20), random(20, height - 20));
  dessins = new ArrayList<Dessin>();
  dessinEnCours = new Dessin(positionDessin, dimensionDessin);
  dessins.add(dessinEnCours);
}

void draw() {
  background(255);
  for (Dessin d : dessins) {
    d.affichage();
  }
}

void keyPressed() {
  if ((key == 'h') || (key == 'H')) {
    dessinEnCours.ajoute(new Ligne(dessinEnCours.extremite, dimensionDessin));
  }
  if ((key == 'g') || (key == 'G')) {
    //dessinEnCours.ajoute(new Rectangle(dessinEnCours.extremite));
  }
  if ((key == 'j') || (key == 'J')) {
    //dessinEnCours.ajoute(new Triangle(dessinEnCours.extremite));
  }
  if ((key == 'k') || (key == 'K')) {
    dessinEnCours.ajoute(new ArcDeCercle(dessinEnCours.extremite, dimensionDessin));
  }
  if (key == ' ') {
    for (Dessin d : dessins) {
      //d.exploser();
    }
  }
  if (keyCode == ENTER) {
    positionDessin.set(random(20, width - 20), random(20, height - 20));
    dessinEnCours = new Dessin(positionDessin, dimensionDessin);
    dessins.add(dessinEnCours);
  }
}

class Dessin {
  ArrayList<Forme> formes;
  PVector extremite, position;

  Dessin(PVector pos, PVector dim) {
    formes = new ArrayList<Forme>();
    position = new PVector(pos.x, pos.y);
    extremite = new PVector(random(dim.x), random(dim.y));
  }

  void ajoute(Forme f) {
    formes.add(f);
    extremite = f.pointB;
  }

  void affichage() {
    pushMatrix();
    translate(position.x, position.y);
    noFill();
    stroke(0);
    for (Forme f : formes) {
      f.affichage();
    }
    popMatrix();
  }
}

class Forme {
  PVector pointA, pointB;

  Forme(PVector v, PVector dim) {
    pointA = new PVector(v.x, v.y);
    pointB = new PVector(random(dim.x), random(dim.y));
  }

  void affichage() {
  }
}

class Ligne extends Forme {
  Ligne(PVector ext, PVector d) {
    super(ext, d);
  }

  void affichage() {
    pushMatrix();
    line(pointA.x, pointA.y, pointB.x, pointB.y);
    popMatrix();
  }
}

class ArcDeCercle extends Forme {
  int hauteur, sens;
  float largeur, angle;

  ArcDeCercle(PVector ext, PVector d) {
    super(ext, d);
    hauteur = floor(random(10, 500));
    sens = floor(random(0, 2));
    largeur = PVector.sub(pointB, pointA).mag();
    angle = PVector.sub(pointB, pointA).heading();
  }

  void affichage() {
    pushMatrix();
    translate(pointA.x, pointA.y);
    rotate(angle);
    arc(largeur / 2, 0, largeur, hauteur, 0 + sens * PI, PI + sens * PI);
    popMatrix();
  }
}

Hors ligne

 

#17 2018-01-03 21:53:50 Re : draw with keyboard

cartide22
membre
Date d'inscription: 2017-12-06
Messages: 20

Re: draw with keyboard



Merci, J'arrive pas à positionner les éléments correctement ils sont tous en diagonal ... et quand j'essaye une autre combinaison ils sortent de mon cadre de travail ...

Hors ligne

 

#18 2018-01-04 08:49:44 Re : draw with keyboard

Mushussu
membre
Lieu: Orléans
Date d'inscription: 2012-05-24
Messages: 784

Re: draw with keyboard



Montre moi tes essais que je comprenne ce que tu veux faire ou sinon explique comment souhaites-tu organiser les différents dessins ?

Hors ligne

 

#19 2018-01-04 19:10:08 Re : draw with keyboard

cartide22
membre
Date d'inscription: 2017-12-06
Messages: 20

Re: draw with keyboard



Bonjour,

d'accord voici l'organisation que je veux atteindre
http://codelab.fr/up/1.jpeg

j'ai essayé de faire ça sur le code pour avoir la répartition dans l'ensemble mais sans success ... je dois être bien loin du compte

positionDessin = new PVector(random(height, width ), random(width, height ));

ou sinon ça :

positionDessin = new PVector(random(10, width / 10), random(10, height / 10));


ou bien ça :

positionDessin = new PVector(1024, 800);

car mon size est de (1024, 800); mais pas moyen ça se met toujours en diagonal

merci énormément pour votre aide

Hors ligne

 

#20 2018-01-05 11:56:17 Re : draw with keyboard

Mushussu
membre
Lieu: Orléans
Date d'inscription: 2012-05-24
Messages: 784

Re: draw with keyboard



Il suffit de faire varier la variable positionDessin en fonction de ses valeurs :

ArrayList<Dessin> dessins;
Dessin dessinEnCours;
PVector dimensionDessin, positionDessin;

void setup() {
  size(1000, 800);
  dimensionDessin = new PVector(200, 200);
  positionDessin = new PVector(0, 0);
  dessins = new ArrayList<Dessin>();
  dessinEnCours = new Dessin(positionDessin, dimensionDessin);
  dessins.add(dessinEnCours);
}

void draw() {
  background(255);
  for (Dessin d : dessins) {
    d.affichage();
  }
}

void keyPressed() {
  if ((key == 'h') || (key == 'H')) {
    dessinEnCours.ajoute(new Ligne(dessinEnCours.extremite, dimensionDessin));
  }
  if ((key == 'g') || (key == 'G')) {
    //dessinEnCours.ajoute(new Rectangle(dessinEnCours.extremite));
  }
  if ((key == 'j') || (key == 'J')) {
    //dessinEnCours.ajoute(new Triangle(dessinEnCours.extremite));
  }
  if ((key == 'k') || (key == 'K')) {
    dessinEnCours.ajoute(new ArcDeCercle(dessinEnCours.extremite, dimensionDessin));
  }
  if (key == ' ') {
    for (Dessin d : dessins) {
      //d.exploser();
    }
  }
  if (keyCode == ENTER) {
    if (positionDessin.x >= width - dimensionDessin.x) {
      positionDessin.x = 0;
      positionDessin.y += dimensionDessin.y;
    } else {
      positionDessin.x += dimensionDessin.x;
    }
    dessinEnCours = new Dessin(positionDessin, dimensionDessin);
    dessins.add(dessinEnCours);
  }
}

class Dessin {
  ArrayList<Forme> formes;
  PVector extremite, position;

  Dessin(PVector pos, PVector dim) {
    formes = new ArrayList<Forme>();
    position = new PVector(pos.x, pos.y);
    extremite = new PVector(random(dim.x), random(dim.y));
  }

  void ajoute(Forme f) {
    formes.add(f);
    extremite = f.pointB;
  }

  void affichage() {
    pushMatrix();
    translate(position.x, position.y);
    noFill();
    stroke(0);
    for (Forme f : formes) {
      f.affichage();
    }
    popMatrix();
  }
}

class Forme {
  PVector pointA, pointB;

  Forme(PVector v, PVector dim) {
    pointA = new PVector(v.x, v.y);
    pointB = new PVector(random(dim.x), random(dim.y));
  }

  void affichage() {
  }
}

class Ligne extends Forme {
  Ligne(PVector ext, PVector d) {
    super(ext, d);
  }

  void affichage() {
    pushMatrix();
    line(pointA.x, pointA.y, pointB.x, pointB.y);
    popMatrix();
  }
}

class ArcDeCercle extends Forme {
  int hauteur, sens;
  float largeur, angle;

  ArcDeCercle(PVector ext, PVector d) {
    super(ext, d);
    hauteur = floor(random(10, 500));
    sens = floor(random(0, 2));
    largeur = PVector.sub(pointB, pointA).mag();
    angle = PVector.sub(pointB, pointA).heading();
  }

  void affichage() {
    pushMatrix();
    translate(pointA.x, pointA.y);
    rotate(angle);
    arc(largeur / 2, 0, largeur, hauteur, 0 + sens * PI, PI + sens * PI);
    popMatrix();
  }
}

Hors ligne

 

#21 2018-01-06 22:06:29 Re : draw with keyboard

cartide22
membre
Date d'inscription: 2017-12-06
Messages: 20

Re: draw with keyboard



Oh yeah super merci beaucoup !

et j'ai compris aussi pourquoi le problème persistait car j'ai gardé les fonctions bouger et exploser du début

void exploser() {
    vitesse.set(random(-40, 5), random(-2, 2));
    vitesseAnglulaire = random(-9, 5);
  }

 void bouger() {
    position.add(vitesse);
    vitesse.mult(0.5);
  }

et le problème c'est que dans le

void affichage() {
    stroke(255);
    pushMatrix();
    translate(position.y, position.y);
    noFill();
    stroke(0);
    for (Forme f : formes) {
      f.affichage();
    }
    popMatrix();
  }

je donnais uniquement la position en taille y ce qui ne permet pas de les repartir comme je souhaitais
bon maintenant j'ai perdu les mouvements que ça me donnait ...

encore merci
smile

Hors ligne

 

fil rss de cette discussion : rss

Pied de page des forums

Powered by FluxBB

codelab, graphisme & code : emoc / 2008-2018