Aliohjelmassa translate(x,y) ja scale(koko); -komennot
|
// Ohjelman tehnyt e-Oppi Oy
// 30.8.2017
void setup() {
size(400, 400); // Ikkunan koko
background(255); // Taustaväri valkoinen
fill(255,0,0); // Täyttöväri punainen
}
void draw() {
ympyra(110, 110,20); // Kutsutaan aliohjelmaa
ympyra(180, 110,50);
}
void ympyra(int x, int y, int r) {
pushMatrix(); // Otetaan nykyinen koordinaatisto muistiin
translate(x, y); // Siiretään origo pisteeseen (x,y)
scale(2*r/100.0); // Skaalataan kuviota isommaksi tai pienemmäksi.
ellipse(0,0,100,100); // Piirretään origoon ympyrä, jonka halkaisija on 100
popMatrix(); // Palautetaan koordinaatisto takaisin
}
Ohjelman tulostus on seuraavanlainen.

Piirretään origoon ympyrä, jonka halkaisija on 100 px. Tässä ympyrä siirretään eri paikkaan translate(x,y); komennolla ja kuvion koko saadaan isommaksi scale(2*r/100.0); komennolla. Huomaa, että laskukaava 2*r/100.0 on kerroin, kuinka moninkertaiseksi kuvio skaalataan. Jos kerroin on yli yksi, kuvio suurenee alkuperäisestä (100 px). Jos kerroin on alle ykkösen, niin kuvio pienenee alkuperäisestä (100 px).
Nyt emme tarvitse välittää koordinaattitietoja, sekä kokotietoja ellipse(x,y,a,b); funktioon. Tämä oivallus helpottaa monimutkaisten kuvioiden siirtämistä ja suurentamista eri paikkaan. Koska kuvion paikka voidaan määrätä translate(x,y)-komennolla ja kuvion koko voidaan määrätä scale(koko)-komennolla. Tärkeintä on lopuksi siirtää origo samassa muodossa takaisin alkuperäiseen paikkaan. Helpoiten tämä onnistuu pushMatrix(); ja popMatrix(); komennoilla. pushMatrix() ottaa koordinaatiston muistiin ja popMatrix() palauttaa muistissa olevan koordinaatiston.