Hello !
Alors voila, j'ai un projet à faire sur Processing qui est à rendre pour lundi, j'ai fais une grosse partie du code, mais il me reste un morceau que je n'arrive pas à faire bouger comme je voudrais.
Il s'agit simplement de faire bouger l'ensemble des lignes, de sorte à ce qu'elles fassent comme un balancier centré, uniquement quand la souris est au centre du cercle.
C'est un projet à rendre pour lundi 8 décembre... Si vous pouvez me dire ce qu'il y a à modifier parmis ces lignes:
float ondulation=0;
float angle;
void setup () {
size(800,600);
}
void draw () {
background(#647AFF);
noCursor();
noStroke();
rectMode(CENTER);
fill(#3098FC);
rect(mouseX,mouseY,100,100);
if ( (mouseX>266)&&(mouseX<450)&&(mouseY>260)&&(mouseY<405)){
stroke(#FC5D30);
}else{ stroke(#9FECF2);
}
strokeWeight(5);
pushMatrix();
rotate(angle);
if ((angle > 0.1)&&(mouseX>266)&&(mouseX<450)&&(mouseY>260)&&(mouseY<405)) {
angle=sin(ondulation)*0.1;
} else {
line (310, 150, 310, 250);
line (360, 150, 360, 250);
line (410, 150, 410, 250);
line(260, 200, 260, 310);
line(210, 200, 210, 310);
line(460, 200, 460, 310);
line(510,200, 510, 310);
line(260, 360, 260, 460);
line(210, 360, 210, 460);
line(460, 360, 460, 460);
line(510, 360, 510, 460);
line (310, 410, 310, 510);
line (360, 410, 360, 510);
line (410, 410, 410, 510);
}
popMatrix();
ondulation+=0.05;
}
merci d'avance pour ceux qui auront la foi de répondre
je vous bénis !
Dernière modification par Wookie (2014-12-03 23:25:45)
Hors ligne
Bonjour,
Qu'appelles-tu faire comme un balancier centré ?
Ta formulation est absconse.
float ondulation=0; float angle; void setup () { size(600, 600); } void draw () { background(#647AFF); noCursor(); noStroke(); rectMode(CENTER); fill(#3098FC); rect(mouseX, mouseY, 100, 100); if ( (mouseX>266)&&(mouseX<450)&&(mouseY>260)&&(mouseY<405)) { stroke(#FC5D30); } else { stroke(#9FECF2); } strokeWeight(5); pushMatrix(); translate(360, 330); rotate(angle); if ((mouseX>266)&&(mouseX<450)&&(mouseY>260)&&(mouseY<405)) { angle=sin(ondulation)*0.1; } line (-50, -180, -50, -80); line (0, -180, 0, -80); line (50, -180, 50, -80); line(-100, -130, -100, -30); line(-150, -130, -150, -30); line(100, -130, 100, -30); line(150, -130, 150, -30); line(-100, 30, -100, 130); line(-150, 30, -150, 130); line(100, 30, 100, 130); line(150, 30, 150, 130); line (-50, 80, -50, 180); line (0, 80, 0, 180); line (50, 80, 50, 180); popMatrix(); ondulation+=0.05; }
Hors ligne
Parce que j'avais besoin de le dire pour pouvoir aller me coucher tranquille...
Je trouve que ton incrémentation, Wookie, trouverait mieux sa place dans le 'if', de manière à ce que le mouvement reprenne de là où il s'était arrêté...
Sinon, je crois que c'est comme tuer un petit chat...
if ((mouseX>266)&&(mouseX<450)&&(mouseY>260)&&(mouseY<405)) { angle=sin(ondulation)*0.1; ondulation+=0.05; }
Bon courage...
Hors ligne
Un balancier centré serait comme un va et vient de droite à gauche comme un pendule. Comme une boussole qui pencherai un coup à droite un coup à gauche.
Donc faudrait que quand le carré rentre dans la zone, les lignes changent de couleur (fait), et qu'elles bougent.
Et j'ai modifié la ligne comme tu me l'as conseillé Olivier. Aucun petit chat ne mourra !
Hors ligne
Donc, à priori comme le fait le bout de code que je t'ai proposé !
Hors ligne
A priori, parce que j'ai écris ce bout de code correctement (enfin il me semble) et ça ne bouge toujours pas !
float ondulation=0;
float angle;
void setup () {
size(800,600);
}
void draw () {
background(#647AFF);
noCursor();
noStroke();
rectMode(CENTER);
fill(#3098FC);
rect(mouseX,mouseY,100,100);
if ( (mouseX>266)&&(mouseX<450)&&(mouseY>260)&&(mouseY<405)){
stroke(#FC5D30);
}else{ stroke(#9FECF2);
}
strokeWeight(5);
pushMatrix();
rotate(angle);
if ((angle > 0.1)&&(mouseX>266)&&(mouseX<450)&&(mouseY>260)&&(mouseY<405)) {
angle=sin(ondulation)*0.1;
ondulation+=0.05;
} else {
line (310, 150, 310, 250);
line (360, 150, 360, 250);
line (410, 150, 410, 250);
line(260, 200, 260, 310);
line(210, 200, 210, 310);
line(460, 200, 460, 310);
line(510,200, 510, 310);
line(260, 360, 260, 460);
line(210, 360, 210, 460);
line(460, 360, 460, 460);
line(510, 360, 510, 460);
line (310, 410, 310, 510);
line (360, 410, 360, 510);
line (410, 410, 410, 510);
}
popMatrix();
}
Hors ligne
Bien...
Je n'ai pas pris la peine de lire le code que tu viens de poster dans la mesure où celui de Mushussu fonctionne très bien et propose une ondulation circulaire alternative autour de son milieu auto-centré parfaitement fonctionnelle...
Si son code ne fonctionne pas chez toi, le problème vient d'ailleurs...
Hors ligne
Je l'ai surement pas écrit au bon endroit, mais je vois pas ou je devrais le mettre.
Hors ligne
AH ! Ca y est j'ai inséré la ligne bien au bon endroit, et ça marche ! Vous êtes géniaux ! merci
Hors ligne
Arg, ça bouge et ça bouge bien (on avance)! mais elles ne restent pas sur place. Il faudrait que toutes les lignes bouge, mais en restant à leur place.
Hors ligne
C'est une autre paire de manche, car il faut appliquer à chaque ligne une rotation. Plutôt que de faire cela manuellement à chaque fois, j'ai opté pour un tableau dans lequel est stocké les positions des lignes. Ensuite, j'applique avec une boucle une rotation à chacune de ces lignes :
float ondulation=0; float angle; PVector[] positionLigne; void setup () { size(600, 600); positionLigne = new PVector[14]; positionLigne[0] = new PVector(-50, -130); positionLigne[1] = new PVector(0, -130); positionLigne[2] = new PVector(50, -130); positionLigne[3] = new PVector(-100, -80); positionLigne[4] = new PVector(-150, -80); positionLigne[5] = new PVector(100, -80); positionLigne[6] = new PVector(150, -80); positionLigne[7] = new PVector(-100, 80); positionLigne[8] = new PVector(-150, 80); positionLigne[9] = new PVector(100, 80); positionLigne[10] = new PVector(150, 80); positionLigne[11] = new PVector(-50, 130); positionLigne[12] = new PVector(0, 130); positionLigne[13] = new PVector(50, 130); } void draw () { background(#647AFF); noCursor(); noStroke(); rectMode(CENTER); fill(#3098FC); rect(mouseX, mouseY, 100, 100); if ( (mouseX>266)&&(mouseX<450)&&(mouseY>260)&&(mouseY<405)) { stroke(#FC5D30); } else { stroke(#9FECF2); } strokeWeight(5); pushMatrix(); translate(360, 330); if ((mouseX>266)&&(mouseX<450)&&(mouseY>260)&&(mouseY<405)) { angle=sin(ondulation)*0.1; ondulation+=0.05; } for (int i = 0; i < 14; i++) { pushMatrix(); translate(positionLigne[i].x, positionLigne[i].y); rotate(angle); line(0, -50, 0, 50); popMatrix(); } popMatrix(); }
Hors ligne
citation :
Il faudrait que toutes les lignes bouge, mais en restant à leur place.
Mmmmh...
Je te soupçonne de vouloir rendre notre ami Mushussu complètement chèvre...
Je crois qu'il ne te reste plus qu'à faire un petit dessin avec des flèches pour que l'on comprenne ce à quoi tu veux arriver...
EDIT : Ah AH... Non seulement Mushussu est perspicace mais il est aussi rapide...
Hors ligne
Ah ouaaaaaais !Jamais j'aurais pu écrire ce code toute seule j'ai pas du tout les compétences, merciiiiiiiiiiiiii !!!!! Vous avez sauvé un projet
Je vous bénis
C'était exactement ça !
Dernière modification par Wookie (2014-12-04 14:35:22)
Hors ligne
Pages: 1