Rotiranje pravougaonika

Započeo maxogm, 07.02.2009, 20:51

prethodna tema - sledeća tema

maxogm

Da ne zna neko neki algoritam kako da rotiram pravougaonik. Znam koordinate jedne tačke i sve stranice. Pravougaonik je potrebno da rotiram u krug oko svog težišta.

Marko Аcović

Malo sam pogledao po netu za ovaj tvoj problem. Mogao bi da se posluzis klasom: java.awt.geom.AffineTransform, tj staticnom metodom getRotateInstance. Imas tri overrideovane verzije iste metode pa vidi koja ti odgovara.
Evo linkova sa primerima i definicijama:

http://java.sun.com/j2se/1.5.0/docs/api/java/awt/geom/AffineTransform.html

http://www.particle.kth.se/~lindsey/JavaCourse/Book/Part1/Supplements/Chapter06/transforms.html

Koliko sam video, pomenuta klasa ima odlicnu podrsku za 2D i 3D transformacije nad objektima. :)

holodoc

U svojoj kolekciji knjiga imam jednu fantastičnu knjigu koja se bavi game design-om u kojoj je veoma lepo objašnjen kompletan matematički model transformacija objekata. Međutim, s obzirom da sam se poodosta bavio ovime (radom na 3D vizuelizaciji) imam stvarno mnogo knjiga na tu temu pa je malo teže da sada posle toliko godina ponovo nađem pravu :D

Elem... Ako želiš da malkice zaroniš u pravu stvar kada je su u pitanju 2D i 3D manipulacija vertisama (svaka vertisa je u stvari tačka 3D prostora definisana sa tri koordinate u odgovarajućem koordinatnom sistemu) onda moraš da se pobrineš da svaku od tih vertisa "pomnožiš" odgovarajućom transformacionom matricom. Za klasičnu 3D rotaciju u bilo kom od smerova potrebna ti je 4x4 transformaciona matrica sa odgovarajućim smerom rotacije. S obzirom da tebi treba samo 2D rotacija može da ti posluži i 3x3 matrica TM koja je u suštini dovoljna i za grubu rotaciju u3D-u.

Ovde nastaje problem :D Zašto? Zato što postoji solidan broj različitih transformacionih matrica koje izvode istu stvar pa je teško razlučiti između "taman dovljno matematike" i "stepena kvaliteta rotacije". Da ne dužim.... Evo ti nekoliko linkova ka stranicama koje daju prikaze osnova iz matematike vezanih za manipulaciju objekata.

http://www.inversereality.org/tutorials/graphics%20programming/3dwmatrices.html
http://www.gamedev.net/reference/articles/article695.asp
http://hem.spray.se/vilius/js3Dtutor.html
http://gpwiki.org/index.php/Matrix_math


Dakle obrati pažnju na to da ako možeš zarad jednostavnosti potražiš članke koji rade sa 3x3 transformacionim matricama jer ne verujem da je tebi potrebna baš tolika preciznost :)

Žao mi je što ne mogu odmah da ti kažem kako izgledaju dobre TM koje sam ja koristio u svojim kodovima jer iskreno rečeno prošlo je strašno mnogo vremena.

Još jedna stvar... Kod 3D transformacija imaš obično tri koraka.
1) Definisanje objekta (vertisa) - recimo za kocku moraš da definišeš 8 vertisa
2) Svaku od tački (vertisa) objekta množiš sa odgovarajućom transformacionom matricom koja u sebi kao jedan o parametara sadrži ugao rotacije
3) Za 3D rotaciju postoji još jedan korak a to je transformacija iz 3D koordinatnog sistema u 2D (zato što pokušavaš da prikažeš 3D objekat u 2D okruženju). Kod tebe to nije potrebno.

Ajde valjda ti je ovo za sada pomoglo... Ja ću pokušati da nađem svoje projekte gde sam baš koristio konkretne 3x3 matrice pa ako nađem javljam ti :)

U Google-u traži "3d matrices tutorials" a dobar izvor infa je gamedev.com.
<?php
abstract class Ignorance extends Stupidity implements Unavoidable 
    private function 
__construct(){
        
parent::__destruct();
    }; 

// EOF -> life.php

maxogm

Hvala, pogledaću nešto pa ću videti šta od svega ovoga može da se izvuče. E da zaboravio sam da napišem da sve ovo treba da se vrti na telefonu, znači j2me aplikacija.

Pozdrav

holodoc

Hehe onda imam pravog čoveka za tebe :D
Znam tipa koji je radio 3D aplikacije isključivo za telefone doduše on je radio čiste algoritme za PalmOS i Symbian. U suštini tebi su bitni algoritmi :)

Javljam se čim dobijem nešto od primera :)
<?php
abstract class Ignorance extends Stupidity implements Unavoidable 
    private function 
__construct(){
        
parent::__destruct();
    }; 

// EOF -> life.php

maxogm

12.02.2009, 07:54 #5 Poslednja Izmena: 12.02.2009, 08:39 od maxo
Hvala na odgovorima... malo matematike je rešilo problem...
Evo dole klase ko hoće da je pogleda, ovo je rotiranje kvadrata... slicno je i za pravougaonik