Kumiankka wrote:Mitenkähän piirtäisin täytetyn neliön haluttuun kulmaan? Yritin kikkailla cosin, sinin ja trifillerin kanssa mutta tuloksista tuli aika epämääräisiä...
Timpen ehdotus on ehdottomasti helpoin, mutta jos haluat tietää, miten sen saisi tehtyä niiden trigonometristen fuonktioiden avulla niin tässä on jonkinlainen selitys. Voi olla hivenen hankalan kuuloista, jos et ole tottunut vektoreihin.
Neliön kulmion koordinaatit saa laskettua muodostamalla vektorit neliön keskipisteestä kulmiin ja kertomalla niitä vektoreita rotaatiomatriisilla. Käytännössä vektori siis muodostetaan niin, että vektorin ensimmäinen komponentti saadaan vähentämällä pisteen x-koordinaatista neliön keskipisteen x-koordinaatti ja toinen komponentti saadaan vähentämällä pisteen y-koordinaatista neliön keskipisteen y-koordinaatti. Eli esim.
Tämän jälkeen kyseistä vektoria kerrotaan rotaatiomatriisilla ja lopputuloksena on jotain tämännäköistä (voin selittää koko prosessin, jos jaksaa kiinnostaa):
Code: Select all
x: cos(kulma)*(x2-x1) - sin(kulma)*(y2-y1)
y: sin(kulma)*(x2-x1) + cos(kulma)*(y2-y1)
Jos haluat rotaation toiseen suuntaan, niin
Code: Select all
x: cos(kulma)*(x2-x1) + sin(kulma)*(y2-y1)
y: sin(kulma)*(x2-x1) - cos(kulma)*(y2-y1)
Lopulliset koordinaatit saat lisäämällä vektorit komponeittain neliön koordinaatteihin. Eli
Code: Select all
newx = x1 + cos(kulma)*(x2-x1) - sin(kulma)*(y2-y1)
newy = y1 + sin(kulma)*(x2-x1) + cos(kulma)*(y2-y1)
Toivottavasti ei tullut kovin pahoja ajatusmokia.
Käytännön toteutus kyllä kannattaa ehdottomasti tehdä Timpen ehdottamalla tavalla, jos et välttämättä halua käydä läpi, mitä siinä taustalla tapahtuu.
EDIT: Lipsahdus korjattu.