Étape 20: 3D Bouncing Ball - traitement
Voici un code de traitement qui montre un ballon rebondissant autour d’un cube 3D.
Ceci est utile car il contient des informations pour l’axiz X, Y et Z.
Il doivent être combinée avec le code Firmata afin d’envoyer les mouvements de tous les 3 axes à l’Arduino, qui à son tour contrôle le stepper motors, que déplacer les plates-formes dans chacun des axes. Ce code est ensuite combiné avec le motif « maillé » de l’étape 14 pour créer un maillage 3D.
Comme à l’étape 6 - j’ai construit cela sur un exemple de code qui est emballé avec le traitement. C’est sous exemples -> Thèmes -> Motion -> Bounce
*** CODE DE TRAITEMENT SEULEMENT ***
/**
* Bounce_3D_0
*
* Lorsque la forme touche le bord de la fenêtre, elle renverse sa direction.
*
* Modification pour la 3D
NOTE : 0,0,0 - haut gauche coin (en face de l’écran d’ordinateur)
points négatifs d’axe Z « dans » l’écran d’ordinateur
points positifs du axe Y vers le bas
positive de X points d’axe vers la droite
*/
int taille = 40 ; Largeur de la forme
flotteur xpos, ypos, zpos ; Position de départ de la forme
profondeur du flotteur ;
flotteur xspeed = 2,5 ; Vitesse de la forme
float yspeed = 2 ; Vitesse de la forme
float zspeed = 3 ;
int xdirection = 1 ; Gauche ou droite
int ydirection = 1 ; Haut en bas
int zdirection = 1 ; avant ou arrière
void setup()
{
taille (400, 400, P3D) ;
noStroke() ;
frameRate(30) ;
Smooth() ;
Définir la position de départ de la forme
PosX = largeur/2 ;
YPos = hauteur/2 ;
ZPOS = - hauteur/2 ; Notez que Zaxis va « dans » l’écran
profondeur = - hauteur ;
}
void draw()
{
Background(102) ;
Lights() ;
boîte en verre / / note : ligne (x1, y1, z1, x 2, y2, z2)
Stroke(255) ;
Précédent
ligne (0,0, profondeur, largeur, profondeur 0,) ;
ligne (0, hauteur, profondeur, largeur, hauteur, profondeur) ;
ligne (0,0, profondeur, 0, hauteur, profondeur) ;
ligne (largeur, 0, profondeur, hauteur, largeur et profondeur) ;
coins
ligne (0,0,0, 0,0, profondeur) ;
ligne (hauteur, 0, 0, 0, hauteur, profondeur) ;
ligne (largeur, 0, 0, largeur, profondeur 0,) ;
ligne (largeur, hauteur, 0, largeur, hauteur, profondeur) ;
Mise à jour la position de la forme
PosX = xpos + (xspeed * xdirection) ;
YPos = ypos + (yspeed * ydirection) ;
ZPOS = zpos + (zspeed * zdirection) ;
Un test pour voir si la forme dépasse les limites de l’écran
Si c’est le cas, inverser sa direction en multipliant par -1
Si (xpos > largeur taille || xpos < 0) {}
xdirection * = -1 ;
}
Si (ypos > taille hauteur || ypos < 0) {}
ydirection * = -1 ;
}
Si (zpos <-hauteur-taille || zpos > 0) {//note qui va de Zaxis « dans » l’écran
zdirection * = -1 ;
}
Dessinez la forme
Lights() ;
traduire (PosX, Posy, zpos) ;
Sphere(Size) ;
}