Tervehdys kaikille,
Elikkäs, olen tässä koittanut saada pähkäiltyä, että miten pystyn kääntää kuvan määritetyn pisteen ympäri. Koitin kattoa haulla, mutta mitään selvettävää vastausta ei löytynyt. Googlekaan ei mitään suoranaista antanut muutakuin rotaatio matriiseista joita tässä en käsittääkseni tarvitse.
Itsen kuvan käännön toteutan SDL_gfx:än SDL_rotozoom -funktiolla.
Olen saanut selvitettyy miten kuvan kääntäminen keskipisteen ympäri tapahtuu ja pieni vainu, että miten kuva käännetään määritetystä pisteestä.
Elikkäs:
kuva2 = SDL_rotozoom( kuva, 90, 1, 1 ); //Näihin arvoihin perustuen minun pitäisi ilmeisemmin lisätä se uusi kääntymispiste double new_x = x - ( kuva2->w >> 1 ); double new_y = y - ( kuva2->h >> 1 ); Draw( kuva2, new_x, new_y );
Edit1:
Vai saadaanko uusi "keskipiste" laskettua lisäämällä alla olevan kaavan tulos. Kaavassa x ja y ovat uusi keskipiste ja nämä kerrotaan kierto matriisilla jolloin saadaan tulos joka pitää lisätä tuohon new_x ja new_y kaavaan.
lainaus:
Vai saadaanko uusi "keskipiste" laskettua lisäämällä alla olevan kaavan tulos. Kaavassa x ja y ovat uusi keskipiste ja nämä kerrotaan kierto matriisilla jolloin saadaan tulos joka pitää lisätä tuohon new_x ja new_y kaavaan.
Näin saat laskettua keskipisteen uudet koordinaatit. Samalla periaatteella voisit kääntää koko kuvan, toistamalla matriisien kertolaskun jokaiselle pikselille. Kuvasi kertolasku lasketaan näin:
x' = x*cos a - y*sin a
y' = x*sin a + y*cos a
Jossa x' ja y' ovat uudet koordinaatit. a vastaa kuvan thetaa (kulma, joka kertoo, kuinka paljon käännetään)
Rotaatiomatriisit on tosi kivoja ja hyödyllisiä, varsinkin sitten kun leikitään kolmessa ulottuvuudessa.
Siis tuohan on suoraan se minun linkittämäni kaava! :o Sinähän kerroit vain tuon saman mikä wikipediassakin lukee?
Itse tarkoitin vain, että voinko hyödyntää tuon kaavan tulosta tuossa new_x ja new_y kaavassani?
Edit1:
Eli kutakuinkin näin?
kuva2 = SDL_rotozoom( kuva, 90, 1, 1 ); //Näihin arvoihin perustuen minun pitäisi ilmeisemmin lisätä se uusi kääntymispiste double new_x = x - ( kuva2->w >> 1 ); double new_y = y - ( kuva2->h >> 1 ); // Uusi "keskipiste" double axisx = 2.0; double axisy = 5.0; double new_pointx = new_x + ( axisx * cos( kulma ) - axisy * sin( kulma ) ); double new_pointy = new_y + ( axisx * sin( kulma ) + axisy * cos( kulma ) ); Draw( kuva2, new_x, new_y );
ONGELMA RATKAISTU! :)
Kiitos kuitenkin.
Aihe on jo aika vanha, joten et voi enää vastata siihen.