Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C: Kuvan kääntäminen pisteen ympäri

kayttaja-3842 [31.03.2011 10:04:49]

#

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.

Kaava

Deffi [31.03.2011 14:03:00]

#

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.

kayttaja-3842 [31.03.2011 14:29:07]

#

Siis tuohan on suoraan se minun linkittämäni kaava! :o Sinähän kerroit vain tuon saman mikä wikipediassakin lukee?

Wikipedia Rotaatio

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 );

kayttaja-3842 [31.03.2011 16:25:20]

#

ONGELMA RATKAISTU! :)

Kiitos kuitenkin.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta