Esimerkki: Naama
Kuinka piirtäisit kuvan mukaisen naaman? Origo on ikkunan keskellä. Seuraavilla komennoilla saataisiin naama aikaiseksi.
fill(200,100,50); // Ruskea väri
ellipse(0,0,200,200); // Taakse tuleva ympyrä
fill(100,200,200); // Sininen väri
ellipse(-25,-25,40,80); // Vasen silmä
ellipse(25,-25,40,80); // Oikea Silmä
fill(0); // Musta väri
ellipse(-25,0,20,20); // Silmän mustuainen, vasen
ellipse(25,0,20,20); // Silmän mustuainen, oikea
fill(255,0,0); // Punainen väri
arc(0,50,100,50,radians(0),radians(180),PIE); // Suu
Mietitään seuraavaksi, kuinka tästä kannattaa tehdä aliohjelma. Kaikkein järkevin tapa on käyttää aliohjelmassa translate(x,y) ja scale(r); komentoja. Jolloin pääohjelma ja aliohjelma on seuraavanlaiset.
|
// Ohjelman tehnyt e-Oppi Oy
// 30.8.2017
void setup() {
size(400, 400); // Ikkunan koko
background(255); // Taustaväri valkoinen
}
void draw() {
for (int a=50; a <= 350; a=a+50) {
// a saa arvoja 50,100,150,200,250,300,350
naama(a,50,50); // Ylärivi, Huomaa x-koordinaatissa muuttuja a
naama(a,150,100); // Keskellä
naama(a,300,150); // Alarivi
}
}
void naama(int x, int y, int w) {
pushMatrix(); // Koordinaatisto muistiin
translate(x, y); // Siirrä hahmoa x:n verran oikealla ja y:n verran alas
scale(w/200.0); // Skaalaa kuvio isommaksi tai pienemmäksi
fill(200,100,50); // Ruskea väri
ellipse(0,0,200,200); // Taakse tuleva ympyrä
fill(100,200,200); // Sininen väri
ellipse(-25,-25,40,80); // Vasen silmä
ellipse(25,-25,40,80); // Oikea Silmä
fill(0); // Musta väri
ellipse(-25,0,20,20); // Silmän mustuainen, vasen
ellipse(25,0,20,20); // Silmän mustuainen, oikea
fill(255,0,0); // Punainen väri
arc(0,50,100,50,radians(0),radians(180),PIE); // Suu
popMatrix(); // Palauta muistissa oleva koordinaatisto
}
Kun ohjelma ajetaan, se tulostaa seuraavaa.

Kuten huomasit, lisäämällä pääohjelmaan for-silmukka, aliohjelmaa voidaan kutsua useasti.
Muutetaan pääohjelmassa koodi seuraavasti.
|
void draw() {
translate(200,200);
for (int a=0; a <= 12; a++) { // a = 0,1,2,3,4,5,6,7,8,9,10,11,12
rotate(radians(30)); // Pyöritä 30° myötäpäivään
naama(100,0,50); // Aliohjelman kutsu
}
}
Tulostuu 12 kappaletta naamoja ympyrän kehälle.

Kuinka naamat saataisiin spiraalille? Muutetaan pääohjelma seuraavanlaiseksi.
|
void draw() {
translate(200,200); // Origo ikkunan keskelle
for (int a=0; a <= 360; a=a+10) { // a = 0,10,20,30,...360
rotate(radians(30)); // Pyöritä 30 myötäpäivään
naama(a,0,a); // Aliohjelma kutsu
}
}
Naama menee kohti ulkoreunaa ja samalla koko kasvaa.

Aliohjelmaa voidaan myös ohjata hiirellä. Tehdään seuraava muutos pääohjelmassa olevaan koodiin.
void draw() {
naama(mouseX,mouseY,100);
}
Tällöin ohjelma tulostaa seuraavaa, kun liikutat hiirtä ikkunassa:

