Tietokonegrafiikkaa

pixy

Seuraavat tehtävät tulevat usein vastaan, jos aikoo piirtää vaikka jonkin
käyrän tietokoneella:

1. Muunnos sovelluskoordinaateista ikkunan pikselikoordinaatteihin.
Pikselin paikka ikkunassa olkoon
xp = pikselin etäisyys vasemmasta reunasta (pikseleitä). xp >= 0
yp = pikselin etäisyys yläreunasta, jolloin siis yp-akseli osoittaa alaspäin.
yp >= 0. Pikselit oletetaan neliön muotoisiksi.

Sovelluskoordinaatisto on tavanomainen koulukoordinaatisto, missä y-akseli
osoittaa ylöspäin. Olkoon ikkunan vasen alakulma sovelluskoordinaateissa
(x0, y0) ja oikea yläkulma (x1, y1).
Ikkunan piirtoalueen leveys on w pikseliä ja korkeus h pikseliä. Annettava
muunnos sovelluskoordinaateista (x,y) pikselikoordinaateiksi (xp, yp):

xp = ax b,
yp = cx d.

Määrättävä a, b, c ja d.


2. Tietokoneen näytöllä on käytettävissä suorakulmainen alue, jonka leveys
on W pikseliä ja korkeus H pikseliä. Tähän alueeseen on asetettava
mahdollisimman suuri ikkuna, jonka piirtoalueen korkeuden suhde leveyteen on q.
Ikkunassa on kehykset. Yläkehyksen paksuus on a pikseliä ja sivu- ja alakehysten
paksuus on b pikseliä. Määrättävä ikkunan leveys w ja korkeus h
(kehykset mukaan luettuna).

1

83

    Vastaukset

    Anonyymi (Kirjaudu / Rekisteröidy)
    5000
    • pixy

      Oma versioni tehtävien ratkaisusta:

      1. x-pikselikoordinaatti saadaan verrannosta

      px / w = (x - x0) / (x1 - x0), mistä

      px = (w / (x1 - x0)) (x - x0), jolloin

      a = w / (x1 - x0) ja b = -w*x0 / (x1 - x0).

      y-pikselikoordinaatti saadaan verrannosta

      py / h = (y1 - y) / (y1 - y0). mistä

      py = h*(y1 - y) / (y1 - y0), jolloin

      c = -h / (y1 - y0) ja d = h*y1 / (y1 - y0).

      Jos pikselikoordinaatit pitää muuttaa kokonaisluvuiksi, niin termeihin b ja d
      lisätään 0.5, jolloin voidaan käyttää pyöristystä katkaisemalla ((int)-cast).


      2. Ikkunan sijoitukselle on kaksi vaihtehtoa:

      2.1. Ikkuna täyttää alueen sivusuunnassa, jolloin ikkunan leveys w = alueen
      leveys W. Silloin piirtoalueen leveys on W - 2b ja korkeus q*(W - 2b). Siitä
      saadaan ikkunan korkeudeksi q*(W - 2b) a b

    Ketjusta on poistettu 0 sääntöjenvastaista viestiä.

    Luetuimmat keskustelut

    1. KUPSinpelaaja vangittu törkeästä rikoksesta

      Tänään tuli uutinen että Kupsin sopimuspelaajs vangittu törkeästä rikoksesta epäiltynä. Kuka pelaaja kysressä ja mikä ri
      Kuopio
      14
      1412
    2. Taasko se show alkaa

      Koo osottaa taas mieltään
      Ikävä
      28
      1285
    3. Minun oma kaivattuni

      Ei ole mikään ilkeä kiusaajatyyppi, vaan sivistynyt ja fiksu sekä ystävällinen ihminen, ja arvostan häntä suuresti. Raka
      Ikävä
      63
      1182
    4. Miksi ihmeessä nainen seurustelit kanssani joskus

      Olin ruma silloin ja nykyisin vielä rumempi En voi kuin miettiä että miksi Olitko vain rikki edellisestä suhteesta ja ha
      Ikävä
      11
      1072
    5. Tervehdys!

      Sä voit poistaa nää kaikki, mut mä kysyn silti A:lta sen kokemuksia sun käytöksestä eron jälkeen. Btw, miks haluut sabot
      Turku
      65
      1026
    6. Persut nimittivät kummeli-hahmon valtiosihteeriksi!

      Persujen riveistä löytyi taas uusi törkyturpa valtiosihteeriksi! Jutun perusteella järjenjuoksu on kuin sketsihahmolla.
      Perussuomalaiset
      27
      1015
    7. Onko ministeri Juuso epäkelpo ministerin tehtäviensä hoitamiseen?

      Eikö hänellä ole kompetenttia hoitaa sosiaali- ja terveysministetin toimialalle kuuluvia ministerin tehtäviä?
      Perussuomalaiset
      9
      1003
    8. Elia tulee vielä

      Johannes Kastaja oli Elia, mutta Jeesus sanoi, että Elia tulee vielä. Malakian kirjan profetia Eliasta toteutuu kokonaan
      Helluntailaisuus
      30
      989
    9. Sakarjan kirjan 6. luku

      Jolla korva on, se kuulkoon. Sain profetian 22.4.2023. Sen sisältö oli seuraava: Suomeen tulee nälänhätä niin, että se
      Profetiat
      6
      981
    10. Kaupungin valtuuston yleisötilaisuus

      YouTubessa katsojia 76 Buahahaha buahahaha buahahaha buahahaha buahahaha buahahaha
      Varkaus
      1
      980
    Aihe