Aksonometria prosta
Janusz Sobieraj - 28 LO

Aksonometria ukosna "prosta"

Pomysł oparty na twierdzeniu K. Pohlkego (1853 r)
Trzy odcinki dowolnej długości leżące na płaszczyźnie rysunku i wychodzące z jednego punktu Oa z których nie wszystkie leżą na jednej prostej, mogą być uważane za rzut równoległy trzech odcinków równej długości, wychodzących z punktu O i wzajemnie prostopadłych.

Skorzystamy z tego twierdzenia. Załóżmy, że mamy punkt przestrzeni P(x,y,z) (patrz rysunek niżej).
Rzutnia aksonometryczna bedzie płaszczyzną trójkąt (kolor fioletowy) - ale ekran komputera umieszczony w płaszczyżnie XY. Aplet po lewej stronie jest implementacją tego modelu.

Ten model charakteryzuje deformacja liniowa 1:skala:1 oraz kąt α pod jakim rysujemy oś Y.


W praktyce często przyjmuje się : skala=½ i α=45º. Tak przyjeto w powyższym aplecie.

Mamy narysować taka właśnie scenę tzn majac współrzedne przestrzenne (x,y,z) , szukamy pary współrzędnych ekranowych (xe,ye).

xe=x+y·skala·cosα
ye=z+y·skala·sinα
Ale oto wzory (patrz rysunek po prawej)
P(x,y,z) → A(xe,ye)

Zaletą modelu jest jego prostota, wadą problem z ustaleniem kierunku rzutowania.. Sensownym wydaje się, by projekcję bryły zmieniać jedynie stosujac wzory na obrót punktu w przestrzeni. Dynamiczna zmiana któregokolwiek z parametrów modelu (tzn skala lub α) jedynie wprowadza chaos w obserwacji.

pkt2d rzut(pkt3d p) 
{ 
 return(new pkt2d(p.x+skala*p.y*ca,p.z+skala*p.y*sa)); 
} 
//------------------------------------------------------- 
void linia(Graphics g,pkt3d p,pkt3d k) 
{ 
 lo28.linia(g, rzut(p), rzut(k)); 
} 
 

Potrafimy rysowac linie w przestrzeni R2 i jest to np procedura lo28.linia(g,pkt2d p, pkt2d k) , wtedy analogiczna procedura w przestrzeni R3 bedzie zrealizowana jak obok.

Przyjeto sa=sinα oraz ca=cosα