8.3 Simulaatiot
Simulaatiot
Simulaation idea
Simulaatio on sellainen animaation muoto, jossa voimme omalla toiminnallamme vaikuttaa animaation kulkuun. Jos voisimme muuttaa laskurin arvoa, esimerkiksi liikuttamalla hiirtä, niin silloin saisimme luotua simulaation.
Luodaan ensin animaatiota varten liukupalkki, jossa hiiren avulla liikutetaan punaista neliötä. Neliö voidaan luoda komennolla: rect(a,0,50,50);, missä käytetään muuttujaa a ilmaisemaan neliön paikkaa vaakasuunnassa. Tehdään ohjelma, jossa muuttujalla x1 on ilmaistu hiiren vaakasuuntainen paikka ja muuttujalla y1 on ilmaistu hiiren pystysuuntainen paikka.
Kun hiiren paikka x1 on suurempi kuin a, silloin kasvatetaan laskuria a ja, kun hiiren paikka x1 on pienempi kuin a, silloin pienennetään laskuria a. Simulaatio saadaan aikaiseksi luomalla liukupalkki, jota ohjataan seuraavalla ohjausrakenteella.
int x1 = mouseX; // Selvitä hiiren vaakakoordinaatti
int y1 = mouseY; // Selvitä hiiren pystykoordinaatti
if (mousePressed == true) {
if ((y1 > 0) && (y1 < 50)) {
if (x1 > a) { // Jos hiiri on oikealla puolen
a++; // niin kasvata laskuria
}
if (x1 < a) { // Jos hiiri on vasemmalla puolen
a--; // niin pienennä laskuria
}
}
}
Ajatellaan, että ikkunan leveys on 400 ja että laskuri voisi saada arvoja väliltä [0, 400]. Komento mouseX lukee hiiren vaakasuuntaisen koordinaatin arvon. Jos hiiren koordinaatin arvo on suurempi kuin laskurin arvo, niin silloin kasvatamme laskuria. Jos hiiren koordinaatin arvo on pienempi kuin laskurin arvo, niin silloin pienennämme laskuria. Jos hiiren koordinaatin arvo on sama kuin laskurin arvo, niin silloin emme tee mitään. Voimme helposti luoda ohjelman, jolla voimme muuttaa laskurin arvoa. Ohjelmaan kannattaa piirtää neliö, joka liikkuu, niin käyttäjä näkee laskurin muuttumisen. Kokonainen ohjelma on seuraava.
// Ohjelman tehnyt e-Oppi Oy
// 30.8.2017
int a = 200; // Laskurin alkuarvo (ikkunan keskellä)
void setup () {
size(400,400); // ikkunan koko
stroke(0); // Musta viivan väri
textSize(20); // Tekstin koko 20
}
void draw() {
background(255); // Tyhjennä tausta
fill(255,255,0); // Keltainen täyttöväri
rect(0,0,400,50); // Piirrä keltainen suorakulmio
fill(255,0,0); // Punainen täyttöväri
rect(a,0,50,50); // Piirrä punainen neliö
int x1 = mouseX; // Selvitä hiiren vaakakoordinaatti
int y1 = mouseY; // selvitä hiiren pystykoordinaatti
if (mousePressed == true) {
if ((y1 > 0) && (y1 < 50)) {
if ((x1 > a) && (a < 350)) { // Jos hiiri on oikealla puolen
a++; // niin kasvata laskuria
}
if ((x1 < a) && (a > 0)) { // Jos hiiri on vasemmalla puolen
a--; // niin pienennä laskuria
}
}
}
fill(0); // Musta tekstin väri
text("Laskuri ="+a,20,200); // Tulosta laskuri
}
Laskurin arvon skaalaaminen sopivaksi
int x2 = round(map(a,0,350,-10,10));

Komento muuttaa muuttujan a arvon, joka vaihtelee välillä [0,350] asteikolle [-10,10]. map()-funktion arvo sijoitetaan muuttujalle x2. Kokonainen ohjelma on seuraavanlainen.
// Ohjelman tehnyt e-Oppi Oy
// 30.8.2017
int a = 200; // Laskurin alkuarvo (ikkunan keskellä)
void setup () {
size(400,400); // ikkunan koko
stroke(0); // Musta viivan väri
textSize(20); // Tekstin koko 20
}
void draw() {
background(255); // Tyhjennä tausta
fill(255,255,0); // Keltainen täyttöväri
rect(0,0,400,50); // Piirrä keltainen suorakulmio
fill(255,0,0); // Punainen täyttöväri
rect(a,0,50,50); // Piirrä punainen neliä
int x1 = mouseX; // Selvitä hiiren vaakakoordinaatti
int y1 = mouseY; // selvitä hiiren pystykoordinaatti
if (mousePressed == true) {
if ((y1 > 0) && (y1 < 50)) {
if ((x1 > a) && (a < 350)) { // Jos hiiri on oikealla puolen
a++; // niin kasvata laskuria
}
if ((x1 < a) && (a >0)){ // Jos hiiri on vasemmalla puolen
a--; // niin pienennä laskuria
}
}
}
fill(0); // Musta tekstin väri
text("Laskuri ="+a,20,150); // Tulosta laskuri
int x2 = round(map(a,0,350,-10,10));
text("Skaalattu arvo x = "+x2,20,200);
if (x2 < 0) {
text("Laskettu arvo: f("+x2+") = 3\u00B7("+x2+") = "+3*x2,20,250);
} else {
text("Laskettu arvo: f("+x2+") = 3\u00B7"+x2+" = "+3*x2,20,250);
}
}
Ohjelman suoritus näyttää tältä.

