Yksinkertainen vektoriesimerkki

Tämän esimerkin tarkoitus on tuottaa tasoaurinkokellon perustietoja yksinkertaisilla vektori- ja matriisioperaatioilla. En voi vannoa matemaattisesti oikeaoppiseksi, on ehkä epätäsmällistä ja teoreettisesti arveluttavaa, mutta riittänee jos kokonaisuus tuottaa oikeita tuloksia.

Ollaan pohjoisella pallonpuoliskolla Suomen leveydellä. 3D -koordinaatisto on oikekätinen, x-akseli osoittaa "oikealle" (itään), y-akseli "ylös" (napaan) ja z-akseli kohti meridiaania. Aurinkokellon asteikon origo on maailmankoordinaatiston origossa.

Tuntikulma kasvaa positiivisen z-akselin suunnasta myötäpäivään (poispäin positiivisesta x-akselista).

( Huom: Tässä käytetty koordinaatisto on ehkä hiukan erikoinen, ei ehkä käytetä yleisesti? )

Lähtökohta on Auringon tuntikulma h ja deklinaatio δ joiden avulla lasketaan Auringosta kohti aurinkokelloa tulevan valon suuntavektori ekvaattorijärjestelmässä. Vektorin pituus on 1.

xe = cos δ sin h
ye = -sin δ 
ze = -cos δ cos h

Negatiivinen y-koordinaatti tarkoittaa siis sitä että valo tulee ylhäältä alaspäin. Positiivinen x-koordinaatti tarkoittaa että valo tulee lännen puolelta.

Tarkistuksen vuoksi vektorin komponenteista voitaisin
ratkaista tuntikulma h ja deklinaatio δ
tan h = xe / -ze
sin δ = -ye

Auringon suuntavektorille suoritetaan muunnos horisonttijärjestelmään kertomalla muunnosmatriisilla niin että koordinaatistoa kierretään x-akselin ympäri. Tässä vaiheessa huomioidaan paikan maantieteellinen leveys φ. Kierron suuruus eli kulma on α = φ - 90° (Huom: tulee negatiivinen kulma) ja käytetään kiertomatriisia Rx :

| 1 0 0 |
| 0 cos α sin α |
| 0 -sin α cos α |

Kiertomatriisihan tarvitsee laskea vain kerran, se pätee samalla paikalla kaikille ekvaattorikoordinaattien arvoille. Tästähän tulee yksikkömatriisi jos α = 0°

Tulosvektori horisonttijärjestelmässä saadaan ekvaattorijärjestelmän vektorin ja kiertomatriisin kertolaskulla:

Vh = [ xe ye ze ] Rx

Tämä matriisioperaatio voidaan mukavasti suorittaa funktiolaskimella joka osaa käsitellä matriiseja suoraan, kuten esim. Texas Instruments TI-84.


Harjoituksen vuoksi lasketaan muutamia Auringon valon suuntavektoreita maantieteelliselle leveydelle 60°. Kun φ = 60° niin α = φ - 90°= -30° ja kiertomatriisiksi Rx tulee likimain:

| 1 0 0 |
| 0 +0,8660 -0,5000 |
| 0 +0,5000 +0,8660 |

Tulosvektorista voidaa ratkaista horisonttikoordinaatit pallopolaarimuodossa, eli atsimuutti A (etelästä myötäpäivään) ja altitudi a

tan A = xh / -zh
sin a = -yh

Pallopolaarikoordinaatteja emme oikeasti tarvitse koska laskenta voidaan jatkossakin tehdä kokonaan vektoreilla. Tässä esimerkissä ne kuitenkin ratkaistaan tarkistuksen vuoksi.

Atsimuutti etelästä myötäpäivään
( kuten tuntikulma h )
Lähtöarvot Ve Vh Tulos
h δ xe ye ze xh yh zh Azimuth altitudi
-10° +0,0000 +0,1736 -0,9848 +0,0000 -0,3421 -0,9396 0,0° +20,0°
15° -10° +0,2549 +0,1736 -0,9513 +0,2549 -0,3253 -0,9106 15,6° +19,0°
30° -10° +0,4924 +0,1736 -0,8529 +0,4924 -0,2761 -0,8254 30,8° +16,0°
45° -10° +0,6964 +0,1736 -0,6964 +0,6964 -0,1979 -0,6899 45,3° +11,4°
...
90° +10° +0,9848 -0,1736 +0,0000 +0,9848 -0,1503 +0,0868 95,0° +8,6°
105° +10° +0,9513 -0,1736 +0,2549 +0,9513 -0,0229 +0,3075 107,9° +1,3°
...
165° +20° +0,2432 -0,3420 +0,9077 +0,2432 +0,1577 +0,9571 165,7° -9,1°
180° +20° +0,0000 -0,3420 +0,9397 +0,0000 +0,1737 +0,9848 180,0° -10,0°
195° +20° -0,2432 -0,3420 +0,9077 -0,2432 +0,1577 +0,9571 194,3° -9,1°
...
255° +20° -0,9077 -0,3420 +0,2432 -0,9077 -0,1746 +0,3816 247,2° +10,1°
270° +20° -0,9397 -0,3420 +0,0000 -0,9397 -0,2962 +0,1710 259,7° +17,2°
285° +20° -0,9077 -0,3420 -0,2432 -0,9077 -0,4178 -0,0397 272,5° +24,7°
...
345° +20° -0,2432 -0,3420 -0,9077 -0,2432 -0,7500 -0,6151 338,4° +48,6°
360° +20° +0,0000 -0,3420 -0,9397 +0,0000 -0,7660 -0,6428 0,0° +50,0°

Tulosrivit joissa on positiivinen yh -arvo eivät erikoisesti kiinnosta aurinkokellon kannalta koska niitä vastaa negatiivinen altitudi, eli Aurinko on silloin horisontin alapuolella.


Aurinkokellon tietojen laskenta etenee ratkaisemalla suoran ja tason leikkauspiste.

Aurinkokellon asteikkotason suunta voidaan ilmoittaa normaalivektorin avulla. Yksinkertaisuuden vuoksi olkoon asteikko horisontaalinen. Tason normaali on silloin maailmankoordinaatiston positiivisen y-akselin suuntainen.

Asteikkoa vasten kohtisuora varjosauva olkoon asteikon origossa ja pituudeltaan 1.

Taso voidaan esittää normaalivektorin N komponenttien avulla yhtälöllä

Ax + By + Cz + D = 0

Kun tason normaalivektori N on

    | A |
N = | B |
    | C |

Tiedetään tasoon kuuluva piste r

    | xr |
r = | yr |
    | zr |

Neljäs tason vakio D voidaan ratkaista

D = -Axr - Byr - Czr

Tässä esimerkissä taso on vaakatasossa ja tason normaali on origossa

    | 0 |
N = | 1 |
    | 0 |

Niinpä origon kautta kulkevan vaakasuoran tason yhtälö on yksinkertaisesti y = 0

Avaruuden suoran määrittelevät kaksi pistettä p ja q joiden kautta suora kulkee ja pq on pisteiden välinen vektori. Tällöin on 3D -suoran parametriesitys :

s(t) = p + t(pq)

Parametri t voidaan ratkaista seuraavalla kaavalla

t = - ( N · p + D ) / ( N · pq )

Tässä esimerkissä piste p voisi sijaita asteikkoa vasten kohtisuoran varjosauvan päässä ja vektori pq olisi Auringon valon suuntainen vektori joka heittää pisteen p varjon asteikkotasolle.

Skalaari N · p + D = 1, koska molemmat vektorit ovat pituudeltaan 1 ja yhdensuuntaisia sekä D = 0.

Tässä tapauksessa voinee siis pelkistää asteikon varjopisteen kaavaksi

x = p - pq / ( N · pq )

Skalaaritulo voidaan laskea vektoreiden komponenteista

        | xv |   | xu |
v · u = | yv | · | yu | = xv xu + yv yu + zv zu
        | zv |   | zu |

Tässä esimerkissä vain normaalivektorin y-komponentti eroaa nollasta, ollen tasan 1, joten käytännössä pistetulon arvo on yhtä kuin vektorin pq eli Auringon valon suuntavektorin y-komponentti joka on negatiivinen kun Aurinko on horisontin yläpuolella. Niinpä varjopisteen kaava pelkistyy edelleen ylläolevan taulukon merkintöjä käyttäen

x = p - Vh / yh
    | 0 |
x = | 1 | - Vh / yh
    | 0 |
    | 0 |   | xh / yh |
x = | 1 | - | yh / yh |
    | 0 |   | zh / yh |

Ja lopulta on todettava että

    | 0 |   | xh / yh |
x = | 1 | - |    1   |
    | 0 |   | zh / yh |

Eli jos vektoreiden vähennyslaskukin ratkaistaan niin

    | -xh / yh |
x = |    0    |
    | -zh / yh |

Vaakasuora asteikko on xz-tasossa, joten varjopisteen y-koordinaatti jätetään huomiotta vaikka se ei aivan nollaan suostuisikaan menemään niinkuin sen teoriassa pitäisi mennä.

Vektoreiden N ja pq täytyy olla yli 90 asteen kulmassa toisiaan vasten että varjo osuisi tasolle.


Jatkaaksemme edellä aloitettua numeerista esimerkkiä leveydelle 60°.

Lähtöarvot Vh Tulos
h δ xh yh zh xt zt
-10° +0,0000 -0,3421 -0,9396 +0,000 -2,747
15° -10° +0,2549 -0,3253 -0,9106 +0,784 -2,799
30° -10° +0,4924 -0,2761 -0,8254 +1,783 -2,989
45° -10° +0,6964 -0,1979 -0,6899 +3,519 -3,486

Tarkistuksen vuoksi voisi kokeilla tuottaako pallopolaarikoordinaateilla laskenta suunnilleen saman tuloksen.


Hmmm, jään miettimään lähinnä sitä että oliko alussa tehty koordinaatiston valinta tarkoituksenmukainen. Jos aurinkokellon asteikko olisi ollut vertikaalinen niin tämä valinta olisi ollut pärfekt koska 3D:stä 2D:hen siirryttyä jäljelle olisi jäänyt xy-taso joka olisi vieläpä ollut oikein päin.

Tässä horisontaalisessa esimerkissä jäljelle jää xz-taso jossa positiivinen z osoittaa outoon suuntaan. Horisontaalinen esimerkki olisi ehkä kannattanut aloittaa sellaisella koordinaatistolla jossa x on oikealle ja y osoittaa "pohjoiseen". Positiivinen y olisi siinä päinvastaiseen suuntaan kuin tässä z.


Matte3D
PÄÄSIVU