Stap 20: 3D Bouncing Ball - verwerking
Hier is sommige Processing-code waarin een bal stuiteren rond in een 3D-kubus.
Dit is handig omdat het bevat informatie voor de X-, Y- en Z-axiz.
Het zal worden gecombineerd met de code Firmata om de bewegingen van alle 3-as verzenden met de Arduino, die op zijn beurt de besturing de stepper motors, die de platforms in elke as bewegen. Die code zal dan worden gecombineerd met het patroon van de "mesh" uit stap 14 voor het maken van een 3D-net.
Zoals in stap 6 - heb ik dit gebouwd op wat voorbeeldcode die kwam verpakt met Processing. Het is onder voorbeelden -> Onderwerpen -> motie -> Bounce
*** VERWERKING CODE ALLEEN ***
/**
* Bounce_3D_0
*
* Wanneer de shape de rand van het venster raakt, keert het haar richting.
*
* Aangepast voor 3D
Opmerking: 0,0,0 - bovenste linkerhoek (zuideljike monitor van de computer)
negatieve Z-as punten 'in' de computermonitor
positieve Y-as punten omlaag
positieve X as punten naar rechts
*/
int size = 40; Breedte van de vorm
float xpos ypos, zpos; Beginopstelling van vorm
float diepte;
zweven xspeed = 2.5; Snelheid van de vorm
zweven yspeed = 2; Snelheid van de vorm
zweven zspeed = 3;
int xdirection = 1; Links of rechts
int ydirection = 1; Van boven naar beneden
int zdirection = 1; voor- of achterkant
VOID Setup
{
grootte (400, 400, P3D);
noStroke();
frameRate(30);
Smooth();
De beginpositie van de vorm instellen
xpos = breedte/2;
yPos = hoogte/2;
zpos = - hoogte/2; Merk op dat Zaxis 'in' het scherm gaat
diepte = - hoogte;
}
VOID draw()
{
Background(102);
Lights();
glazen doos / / Let op: lijn (x1, y1, z1, x 2, y2, z2)
Stroke(255);
Terug
lijn (0,0, diepte, breedte, diepte van 0,);
lijn (0, hoogte, diepte, breedte, hoogte, diepte);
lijn (0,0, diepte, 0, hoogte, diepte);
lijn (breedte, 0, diepte, breedte, hoogte, diepte);
hoeken
lijn (0,0,0, 0,0, diepte);
lijn (0, hoogte, 0, 0, hoogte, diepte);
lijn (breedte, 0, 0, breedte, diepte van 0,);
lijn (breedte, hoogte, 0, breedte, hoogte, diepte);
Update de positie van de vorm
xpos = xpos + (xspeed * xdirection);
yPos = ypos + (yspeed * ydirection);
zpos = zpos + (zspeed * zdirection);
Testen om te zien of de shape groter is dan de grenzen van het scherm
Zo ja, zijn richting omkeren door te vermenigvuldigen met -1
Als (xpos > breedte-grootte || xpos < 0) {}
xdirection * = -1;
}
Als (ypos > hoogte-grootte || ypos < 0) {}
ydirection * = -1;
}
Als (zpos <-hoogte-grootte || zpos > 0) {//note dat Zaxis 'in' het scherm gaat
zdirection * = -1;
}
Teken de vorm
Lights();
vertalen (xpos, ypos, zpos);
Sphere(size);
}