Piirretään piirtoikkunaan mahdollisimman suuri ympyrä. Ympyrän halkaisijan pituus riippuu siitä, kumpi on suurempi: ikkunan leveys vai korkeus. Ensimmäisessä esimerkissä leveys on suurempi, joten ympyrän halkaisija on ikkunan korkeus.
size (300, 200);
<<muuttuja-ympyra-runko>>
Kun ikkunan mittasuhteet muuttuvat, ympyrän halkaisija on ikkunan leveys.
size (300, 400);
<<muuttuja-ympyra-runko>>
Huomataan, että ohjelmaan on kirjoitettu funktion ellipse()
kutsu
kahdesti, vaikka vain ympyrän halkaisija muuttuu. Voisiko tämän
hoitaa fiksummin?
Tietokoneohjelmassa muuttuja on nimetty muistipaikka, johon voidaan tallentaa mm. lukuja. Muuttujan arvo voi muuttua ohjelman suorituksen aikana.
Ohjelmoidaan yllä olevan esimerkin mukainen ohjelma käyttämällä
muuttujaa halkaisija
.
size (400, 300);
float halkaisija; // määritellään muuttuja nimeltä halkaisija, ei arvoa
if (width > height)
halkaisija = height; // halkaisijan arvo on ikkunan korkeus
else
halkaisija = width; // halkaisijan arvo on ikkunan leveys
ellipse (width / 2.0, height / 2.0, halkaisija, halkaisija);
Huomaa, että
- toisin kuin vakiota määritellessä, sanan
float
edessä ei luefinal
- muuttujalle ei tarvitse antaa arvoa määrittelevällä rivillä
- muuttujalle asetetaan arvo yhtäsuuruusmerkin
=
avulla.
Monet ohjelmoijat kirjoittavat muuttujien nimet pienillä kirjaimilla erotellakseen ne vakioista.
Piirretään ikkunaan palkki, joka peittää P
prosenttia ikkunasta,
missä P
on vakio. Jos vakion P
arvo on alle 90, palkki on
sininen. Muussa tapauksessa palkki on vihreä.
Ensimmäisessä tapauksessa vakion P
arvo on alle 90.
size (600, 100);
final float P = 65;
<<muuttuja-palkki-runko>>
Kun vakion P
arvo kasvaa, palkin väri muuttuu vihreäksi.
size (600, 100);
final float P = 95;
<<muuttuja-palkki-runko>>
Piirretään mahdollisimman suuri ellipsi, jonka keskipisteen
\(x\)-koordinaatti on vakio X
. Korkeussuunnassa ellipsin
keskipiste on ikkunan puolivälissä.
Ensimmäisessä tilanteessa keskipisteen etäisyys vasempaan reunaan määrittää ellipsin leveyden.
size (400, 300);
final float X = 100;
<<muuttuja-ellipsi-runko>>
Toisessa tilanteessa vakion X
arvo on suurempi, ja ellipsin
leveys määräytyy keskipisteen etäisyydestä ikkunan oikeaan reunaan.
size (500, 100);
final float X = 440;
<<muuttuja-ellipsi-runko>>
Alla on vaihtoehtoinen, lyhyempi ratkaisu. Etäisyys ikkunan reunaan voidaan päätellä myös suoraan siitä, sijaitseeko keskipiste ikkunan vasemmassa vai oikeassa puoliskossa.
size (200, 300);
final float X = 150;
float etaisyys; // keskipisteen etäisyys ikkunan reunaan
if (X < width / 2.0)
etaisyys = X; // keskipiste ikkunan vasemmassa puoliskossa
else
etaisyys = width - X;
ellipse (X, height / 2.0, 2 * etaisyys, height);
Ratkaise seuraavat tehtävät muuttujien avulla.
- Kirjoita ohjelma, joka piirtää \((400 × 400)\)-kokoisen
piirtoikkunan keskelle ympyrän. Määrittele ohjelmassasi muuttuja
ympyrän halkaisijalle. Halkaisija on 100, jos vakion
K
arvo on alle 100. Muussa tapauksessa halkaisija on 200. Testaa ohjelmasi toimivuus muuttamalla vakionK
arvoa. - Kirjoita ohjelma, joka piirtää \((400 × 400)\)-kokoisen
piirtoikkunan vasempaan ylänurkkaan ympyrän. Määrittele
ohjelmassasi muuttuja ympyrän halkaisijalle. Halkaisija on 100,
jos vakion
K
arvo on alle 100. Muussa tapauksessa halkaisija on 200. Testaa ohjelmasi toimivuus muuttamalla vakionK
arvoa. - Kirjoita ohjelma, joka piirtää piirtoikkunan keskelle mahdollisimman suuren valkoisen neliön. Testaa ohjelmasi toimivuus muuttamalla piirtoikkunan kokoa.
- Piirrä piirtoikkunan keskelle mahdollisimman suuri ympyrä, joka toteuttaa seuraavan ehdon: ympyrän ja piirtoikkunan väliin jää joka suunnassa tilaa vähintään ympyrän säteen verran.
- Kirjoita ohjelma, jossa määritellään vakiot
X1
jaX2
, joiden molempien arvo on vähintään 0 ja korkeintaan 300. Ohjelma piirtää \((400 × 400)\)-kokoiseen piirtoikkunan yläreunaan \((100× 100)\)-kokoisen neliön, jonka vasemman yläkulman \(x\)-koordinaatti on pienempi vakioistaX1
jaX2
(kumpi tahansa vakioista, jos vakiot ovat yhtä suuret). Testaa ohjelmasi toimivuus muuttamalla vakioiden arvoja. - a) Jaetaan neliön muotoinen piirtoikkuna kahteen osaan alla olevan kuvan mukaisesti.
size (5cm, 0);
draw (unitsquare);
fill (N -- (N + E) -- E -- cycle, red);
fill (N -- (0, 0) -- E -- cycle, blue);
Mikä ehto pätee niiden pisteiden \(x\)- ja
\(y\)-koordinaateille, jotka sijaitsevat ikkunan punaisessa
osassa?
b) Kirjoita ohjelma, jossa määritellään vakiot X
ja Y
,
joiden molempien arvo on vähintään 100 ja
korkeintaan 300. Ohjelma piirtää \((400×
400)\)-kokoiseen piirtoikkunaan ympyrän, jonka keskipiste on
kohdassa (X
, Y
) ja jonka halkaisija on 10. Ympyrä on
punainen, jos sen keskipiste sijaitsee ikkunan
“punaisessa” osassa. Muussa tapauksessa ympyrä
on sininen.
- Kirjoita ohjelma, joka piirtää neliön muotoiseen piirtoikkunaan
mahdollisimman suuren ympyrän, joka täyttää seuraavat ehdot.
- Ohjelman vakio
X
määrää ympyrän keskipisteen \(x\)-koordinaatin. - Ympyrän keskipiste on piirtoikkunan lävistäjällä, jonka toinen pää on origossa.
Alla on ohjelman piirtämä kuva, kun ikkunan koko on \((400× 400)\) ja vakion
X
arvo on 370. - Ohjelman vakio
-
size (400, 400); final float K = 150; float h; // halkaisija if (K < 100) h = 100; else h = 200; ellipse (width / 2.0, height / 2.0, h, h);
-
size (400, 400); final float K = 150; float d; // halkaisija if (K < 100) d = 100; else d = 200; float r = d / 2; // ympyrän säde ellipse (r, r, d, d);
-
size (300, 400); noStroke (); float sivu; if (width < height) sivu = width; else sivu = height; float puolet = sivu / 2; // puolet sivun pituudesta rect (width / 2.0 - puolet, height / 2.0 - puolet, sivu, sivu);
- Valitaan ikkunan leveydestä ja korkeudesta se, joka on
pienempi. Ehto toteutuu, kun ympyrän halkaisija on puolet
valitusta mitasta.
size (400, 300); float pienempi; // pienempi ikkunan mitoista if (width < height) pienempi = width; else pienempi = height; float halkaisija = pienempi / 2; ellipse (width / 2.0, height / 2.0, halkaisija, halkaisija);
-
size (400, 400); final float X1 = 100; final float X2 = 300; float x; // neliön vasemman reunan x-koordinaatti if (X1 < X2) x = X1; else x = X2; rect (x, 0, 100, 100);
- a) Punaisessa osassa \(y < x.\)
b)
size (400, 400);
final float X = 200;
final float Y = 100;
colorMode (HSB, 100);
noStroke ();
float savy;
if (Y < X)
savy = 0;
else
savy = 65;
fill (savy, 100, 100);
ellipse (X, Y, 10, 10);
-
<<muuttuja-ympyra-lavistajalla>>