Perspektivne transformacije

Sve vezano u matematiku & fiziku koja zaluta u vaš projekt.
Post Reply
User avatar
Denis
Sajentist on djuti!
Posts: 2618
Joined: Tue Aug 26, 2008 9:35 pm
Smallest prime number bigger than 20: 23

Perspektivne transformacije

Post by Denis » Sat Oct 23, 2010 7:04 pm

Imam sljedeći problem. Imam četiri točke koje čine konveksni četverokut, te točku unutar tog konveksnog četverokuta. Trebam tu točku mapirati na drugi konveksni četverokut kojem znam koordinate vrhova. Znači nešto ovako:
Image
Zanima me konkretno matematičko objašnjenje, treba mi za implementaciju u jednoj puzzle igri :)

User avatar
Baraba
Posts: 41
Joined: Fri Oct 15, 2010 2:59 pm
Smallest prime number bigger than 20: 23

Re: Perspektivne transformacije

Post by Baraba » Sat Oct 23, 2010 7:51 pm

Imaš to dobro objašnjeno u skripti od Marka Čupića:

Code: Select all

http://www.megaupload.com/?d=7E4NQRSP

User avatar
Denis
Sajentist on djuti!
Posts: 2618
Joined: Tue Aug 26, 2008 9:35 pm
Smallest prime number bigger than 20: 23

Re: Perspektivne transformacije

Post by Denis » Sat Oct 23, 2010 8:03 pm

Baraba wrote:Imaš to dobro objašnjeno u skripti od Marka Čupića:

Code: Select all

http://www.megaupload.com/?d=7E4NQRSP
Zahvaljujem, budem proučio :)
Hvala :)

User avatar
EmP
Veliki brat malih trokuta
Posts: 498
Joined: Tue Sep 01, 2009 10:14 pm
Smallest prime number bigger than 20: 23
Location: Zagreb
Contact:

Re: Perspektivne transformacije

Post by EmP » Sun Oct 24, 2010 11:28 am

Baraba wrote:Imaš to dobro objašnjeno u skripti od Marka Čupića:

Code: Select all

http://www.megaupload.com/?d=7E4NQRSP
:D :tup:


Uglavnom, shema ti je da nađeš matricu transormacije jednog četverokuta u drugi (onda ti je obratna transformacija inverzna matrica) i onda tom matricom množiš vektor točke. E sad kako matricu napravit. Prvo si za oba četverokuta moraš odrediti ishodište (di ti se na njima nalazi (0, 0)), smjer vektora x i smjer vektora y.

Označimo parametre četverokuta na slijedeći način:
Ishodište: (Ox, Oy, Oz)
Vektor x: (Xx, Xy, Xz)
Vektor y: (Yx, Yy, Yz)
Vektor z dobiva se kao vektorski produkt vektora x i y i neka njegova oznaka bude (Zx, Zy, Zz)

Iz tih parametara napravi se slijedeća matrica (DirectX):

Code: Select all

  [Xx Xy Xz 0]
M=[Yx Yy Yz 0]
  [Zx Zy Zz 0]
  [Ox Oy Oz 1]
Označimo matricu za prvi četverokut A a za drugi B. Ono što nam takve matrice rade jest trasformaciju iz jediničnog četverokuta (ishodište u (0, 0), vektori x i y se poklapaju s osima x i y) u četverokut za koji je izgrađena. Ideja je da se koordinate iz prvog četverokuta vrate u jedinični i onda prebace u drugi. Vraćanje iz prvog u jedinični vrši se inverzom od A a prebacivanje iz jediničnog u drugi normalnom B matricom. Dakle ukupna transformacijska matrica je M=(A^-1)*B.
Nexus 64213 blog - IKON: moja verzija JSONa
Stareater blog - lijepe slike kak napreduje kod

User avatar
Denis
Sajentist on djuti!
Posts: 2618
Joined: Tue Aug 26, 2008 9:35 pm
Smallest prime number bigger than 20: 23

Re: Perspektivne transformacije

Post by Denis » Tue Oct 26, 2010 3:53 pm

EmP wrote:
Baraba wrote:Imaš to dobro objašnjeno u skripti od Marka Čupića:

Code: Select all

http://www.megaupload.com/?d=7E4NQRSP
:D :tup:


Uglavnom, shema ti je da nađeš matricu transormacije jednog četverokuta u drugi (onda ti je obratna transformacija inverzna matrica) i onda tom matricom množiš vektor točke. E sad kako matricu napravit. Prvo si za oba četverokuta moraš odrediti ishodište (di ti se na njima nalazi (0, 0)), smjer vektora x i smjer vektora y.

Označimo parametre četverokuta na slijedeći način:
Ishodište: (Ox, Oy, Oz)
Vektor x: (Xx, Xy, Xz)
Vektor y: (Yx, Yy, Yz)
Vektor z dobiva se kao vektorski produkt vektora x i y i neka njegova oznaka bude (Zx, Zy, Zz)

Iz tih parametara napravi se slijedeća matrica (DirectX):

Code: Select all

  [Xx Xy Xz 0]
M=[Yx Yy Yz 0]
  [Zx Zy Zz 0]
  [Ox Oy Oz 1]
Označimo matricu za prvi četverokut A a za drugi B. Ono što nam takve matrice rade jest trasformaciju iz jediničnog četverokuta (ishodište u (0, 0), vektori x i y se poklapaju s osima x i y) u četverokut za koji je izgrađena. Ideja je da se koordinate iz prvog četverokuta vrate u jedinični i onda prebace u drugi. Vraćanje iz prvog u jedinični vrši se inverzom od A a prebacivanje iz jediničnog u drugi normalnom B matricom. Dakle ukupna transformacijska matrica je M=(A^-1)*B.
Sorry nisam imao vremena baš proučit i prije odgovoriti.
Ugl, pitanje, zašto DirectX matrica? Ja ne želim ništa pokazivati, imam jednostavno 4 točke jednog četverokuta (vrhovi), točku u tom četverokutu, 4 točke drugog četverokuta, i treba mi točka u tom drugom četverokutu. Sve točke imaju X i Y vrijednost. U biti, da nacrtam što želim:
Image
Znači znam A, B, C, D, E, F, G, H, T (sve su to 2D točke), zanima me T'(X, Y).

User avatar
EmP
Veliki brat malih trokuta
Posts: 498
Joined: Tue Sep 01, 2009 10:14 pm
Smallest prime number bigger than 20: 23
Location: Zagreb
Contact:

Re: Perspektivne transformacije

Post by EmP » Tue Oct 26, 2010 11:38 pm

Pa možeš koristit matrice bez renderiranja jer sve što one rade jest transformacija točaka, a upravo to je tvoj problem. Ono sam pokazao za DX matricu tak, čisto ko mogućnost, možeš koristit matrice iz koje god biblioteke, matematika je ista.

U ovom zadnjem primjeru, četverokut nije paralelogram, to komplicira stvari, ali nije nemoguće. Sam reci, da li su četverokuti u 2D il u 3D?
Nexus 64213 blog - IKON: moja verzija JSONa
Stareater blog - lijepe slike kak napreduje kod

User avatar
Denis
Sajentist on djuti!
Posts: 2618
Joined: Tue Aug 26, 2008 9:35 pm
Smallest prime number bigger than 20: 23

Re: Perspektivne transformacije

Post by Denis » Wed Oct 27, 2010 12:47 pm

2D

Post Reply

Who is online

Users browsing this forum: No registered users and 1 guest