Osa 4 – Maalia kankaalle

Tässä osassa tutustutaan kankaisiin ja niille piirtämiseen. Kankaat ovat HTML-elementtejä, joihin voi piirtää JavaScript-komennoilla kuvioita.

Esimerkki

Kangas, jolle on piirretty neliö.

Kangas määritellään canvas-elementtinä ja sille tulee asettaa id-tunniste, jotta siihen voidaan viitata javascript koodissa. Kankaan taustaväri on automaattisesti asetettu valkoiseksi. Valkoinen kangas ei kuitenkaan erotu sivun pohjasta, joka on valkoinen. Jos kangas halutaan saada näkyviin sivulla, annetaan sille taustaväri. Taustaväri voi olla mikä tahansa väri. Esimerkiksi beigen taustavärin saa määrittämällä id-tunnisteen lisäksi style-arvon.

Esimerkki

Beige kangas, jolle on piirretty neliö.

Kangasta muokataan javascript koodilla. Kangas on ikään kuin paperi, jolle voidaan piirtää ohjelmalla. Luodaan muuttuja var piirtäjä, jonka arvoksi asetetaan kankaan sisältö var piirtäjä = kangas.getContext("2d") . Tätä muuttujaa käytettään kankaalle piirtämiseen, siksi se nimi on piirtäjä.

Kankaalle piirretään suorakulmion käyttämällä komentoa piirtäjä.fillRect, jolle annetaan neljä parametria. Ensimmäiset kaksi ovat suorakulmion sijainti kankaalla eli koordinaatit. Viimeiset kaksi ovat suorakulmion korkeus ja leveys.

Tehtävä

Lisää ohjelmaan koodi, jossa piirretään kankaalle neliö, jonka parametrit ovat (0,0,30,30).

4.1 Koordinaatisto

Kun kankaalle piirretään, käytetään siihen kankaan koordinaatteja. Tutustutaan, miten kankaan koordinaatit toimivat.

Tietokoneen näyttö koostuu koneesta riippuen sadoista tuhansista tai jopa miljoonista pikseleistä. Yksi pikseli on hyvin pieni piste, jolla on jokin väri. Näytöllä pikselit on järjestetty riveihin, joita on satoja päällekkäin. Laittamalla tietyn värisiä pikseleitä sopivasti vierekkäin tietokoneen näytölle, voidaan muodostaa kuvia ja tekstiä, jota ihminen pystyy ymmärtämään.

Vuonna 2010 valistetun tietokonenäytön pikselit voi erottaa tavallisen suurennuslasin avulla.

Pikselin sijainnin perusteella sen väriä voidaan muuttaa tietokone ohjelmalla. Pikselin sijaintia tietokoneen näytöllä kutsutaan pikselin koordinaateiksi. Tarkemmin pikselin X-koordinaatti kertoo, kuinka mones pikseli pikseli on omalla rivillään. Y-koordinaatti taas kertoo, kuinka mones pikselirivi on kyseessä.

Ohjelmoinnissa asioiden laskeminen aloitetaan nollasta eikä yhdestä. Myös pikselirivin ensimmäistä pikseliä sanotaan “pikseliksi 0” ja ensimmäistä pikseliriviä “riviksi 0”. Aivan ensimmäisen pikselin (joka on näytön vasemmassa ylänurkassa) X-koordinaatti on siis 0 ja Y-koordinaatti 0. Tätä pikseliä sanotaan näytön origoksi.

Ankkanappula siirtyy ruutupaperilla. Laskemalla rivin ruutuja nollasta alkaen laskemme oikeastaan, kuinka monta askelta nappulan paikka muuttuu rivin suunnassa. Kuvassa rivin paikka muuttuu yhdellä. Samoin laskemalla rivejä nollasta, laskemmekin kuinka monta riviä nappulan paikka muuttuu. Kuvassa nappulan paikka muttuu kahdella. Nappulan alkuruudun voi ajatella olevan origo. Näin voimme osoittaa mitä tahansa paperin ruutua sen koordinaattien avulla. Vastaavasti tietokonenäytöllä olevan kankaan ensimmäinen pikseli toimii tuon kankaan origona. Sen avulla laskemme kankaan jokaisen pikselin koordinaatit.

Huom!

Koulussa matematiikassa koordinaatiston Y-koordinaatit kasvavat ylöspäin, eli suurempi Y tarkoittaa korkeammalla olevaa pistettä. Ohjelmoinnissa Y kuitenkin kasvaa alaspäin, eli suurempi Y tarkoittaa, että piste on alempana. Tämä johtuu historiallisista syistä.

Koordinaatit kankaalla

Vie hiiri kankaan päälle nähdäksesi hiiren sijainnin esitettynä koordinaatteina. Tämän kankaan leveys on 300 pikseliä ja korkeus 150 pikseliä.

4.2 fillStyle-komento

Esimerkki

piirtäjän väriä vaihdetaan käyttämällä piirtäjä.fillStyle komentoa ennen kuin kuvio piirretään kankaalle. Haluttu väri annetaan komennolle parametrina. Alla olevasta listasta näet joitakin värejä ja niiden nimiä JavaScriptissä.

Väri Englanniksi Suomksi
white valkoinen
beige beige
gray harmaa
black musta
cyan syaani
blue sininen
violet violetti
red punainen
brown ruskea
orange oranssi
yellow keltainen
green vihreä

Useimpien värien eteen voi lisätä sanan “dark” tarkoittamaan tummaa ja “light” tarkoittamaan vaaleaa. Esimerkiksi “lightgreen” on vaaleanvihreä ja “darkblue” tummansininen.

Tehtävä

Muuta fillRect-komennon koordinaatteja siten, että neliö on kankaan oikean reunan keskellä. Voit käyttää yllä olevaa Koordinaatit kankaalla -työkalua sopivien koordinaattien löytämiseksi.

Tehtävä

Piirrä kankaan alareunaan sininen neliö.

Useita neliöitä

Kankaalle piirretään useita neliöitä kirjoittamalla monta fillRect-komentoa.

Esimerkki

Kangas, jolle on piirretty kaksi punaista ja kaksi sinistä neliötä.

4.3 Polut

Kankaalle monimutkaisemmat kuviot piirretään polkujen avulla. Polun piirtäminen muistuttaa kynällä piirtämistä. Komennoilla kerrotaan piirtäjälle, miten kynää liikutetaan kankaalla. Tärkeimmät komennot on alla olevassa taulukossa.

Komento Esimerkki Selitys
.strokeStyle piirtäjä.strokeStyle = "red" Kertoo minkä värisellä kynällä polku piirretään
.beginPath() piirtäjä.beginPath() Kertoo piirtäjälle, että aloitamme polun piirtämisen
.moveTo(x, y) piirtäjä.moveTo(10, 10) Käskee piirtäjää siirtämään kynän annettuihin koordinaatteihin koskettamatta paperia
.lineTo(x, y) piirtäjä.lineTo(50, 50) Käskee piirtäjää vetämään kynän annettuihin koordinaatteihin niin, että kynä koskettaa paperia
.stroke() piirtäjä.stroke() Kertoo piirtäjälle, että lopetamme polun piirtämisen

Esimerkki

Kangas, jolle on piirretty raksi.

Tarkastellaan seuraavaksi, miten kankaalle piirretään raksi. Ensin pitää aloittaa polun piirtäminen käyttämällä komentoa piirtäjä.begin.Path() ja siirretään kynä siihen pisteeseen, josta raksi alkaa komennolla piirtäjä.moveTo(10, 10). Kun kynä on kohdassa, josta kuva aloitetaan piirtäämään, niin piirretään raksin ensimmäinen viiva alaviistoon komennolla piirtäjä.lineTo(10, 10). Ensimmäisen viivan jälkeen kynä siirretään raksin toisen viivan alkusijaintiin komennolla piirtäjä.moveTo(10, 50) ja piirretään viiva alaoikeaan komennolla piirtäjä.lineTo(50, 10). Kun raksi on valmis, piirtäminen lopetetaan komennolla piirtäjä.stroke().

Huom!

fillRect()-komennon väri määritetään fillStyle-komennolla. stroke()-komennon väri määritetään strokeStyle:llä.

Tehtävä

Muuta koordinaatteja siten, että raksi on koko kankaan kokoinen. Etsi sopivat koordinaatit koordinaatit kankaalla-työkalulla.

Tehtävä

Lisää moveTo()- ja lineTo-komentoja siten, että kankaalla näkyy ainakin kolme eri viivaa.

Tehtävä

Lisää moveTo()- ja lineTo-komentoja piirtäksesi kolmion.

Tehtävä

Lisää moveTo()- ja lineTo-komentoja piirtäksesi talon (neliöstä ja kolmiosta).

Kysymyksiä