Współrzędne jednorodne

Z Wikipedii, wolnej encyklopedii
Skocz do: nawigacja, szukaj

Współrzędne jednorodne to sposób reprezentacji punktów n-wymiarowych za pomocą n+1 współrzędnych. Współrzędne jednorodne zostały wprowadzone do geometrii w 1827 przez Augusta Möbiusa w pracy Der barycentrische Calcul. W 1946, E. Maxwell użył ich do rozwiązywania problemów związanych z rzutowaniem. Ze względu na kilka zalet znalazły zastosowanie w grafice komputerowej.

Punkt w przestrzeni dwuwymiarowej (na płaszczyźnie) opisuje para liczb (x,y), we współrzędnych jednorodnych trójka (x,y,W); podobnie punkt trójwymiarowy we współrzędnych jednorodnych reprezentuje czwórka (x,y,z,W), itd.

Jeśli współrzędna W \ne 0, wówczas można podzielić przez nią pozostałe współrzędne, np. \left(\frac x W, \frac y W\right). Liczby \frac x W, \frac y W (itd.) nazywane są współrzędnymi kartezjańskimi punktu jednorodnego.

Jeśli natomiast W = 0, wówczas takie punkty nazywane są punktami w nieskończoności lub niewłaściwymi.

Dwa punkty jednorodne reprezentują ten sam punkt wtedy, gdy jeden jest wielokrotnością drugiego; istnieje nieskończenie wiele reprezentacji jednego punktu. W przestrzeni jednorodnej punkt reprezentuje prostą przechodzącą przez środek układu współrzędnych, natomiast punkt we współrzędnych kartezjańskich jest rzutem środkowym na płaszczyznę W=1.

Zastosowania w grafice komputerowej[edytuj | edytuj kod]

Przekształcenia macierzowe[edytuj | edytuj kod]

W roku 1965 L. Roberts zauważył, że współrzędne jednorodne znakomicie nadają się do macierzowego opisu przekształceń w przestrzeniach n-wymiarowych.

Podstawowymi przekształceniami stosowanymi w grafice są: skalowanie, obrót, pochylenie i translacja. Zapis macierzowy wszystkich tych przekształceń przedstawia się następująco (przykład dla dwóch wymiarów):


\begin{bmatrix}x'\\y'\end{bmatrix} = A \cdot X + T =
\begin{bmatrix}a_{11} & a_{12} \\ a_{21} & a_{22}\end{bmatrix} \cdot
\begin{bmatrix}x\\y\end{bmatrix} +
\begin{bmatrix}t_x\\t_y\end{bmatrix} =
\begin{bmatrix}a_{11}x + a_{12}y + t_x\\a_{21}x + a_{22}y + t_y\end{bmatrix}

gdzie macierz A zawiera skumulowane informacje o obrocie, skalowaniu i pochyleniu, natomiast wektor T przesunięcie. Stosując współrzędne jednorodne można za pomocą macierzy 3x3 przedstawić wszystkie przekształcenia:


\begin{bmatrix}x'\\y'\\W'\end{bmatrix} = A \cdot X =
\begin{bmatrix}
a_{11} & a_{12} & t_x \\
a_{21} & a_{22} & t_y \\
0 & 0 & 1 \end{bmatrix} \cdot
\begin{bmatrix}x\\y\\W\end{bmatrix} =
\begin{bmatrix}
a_{11}x + a_{12}y + t_xW\\
a_{21}x + a_{22}y + t_yW\\
W
\end{bmatrix}

Macierz będąca iloczynem dowolnej liczby macierzy reprezentujących różne przekształcenia zawiera złożenie tych przekształceń. Dzięki temu zamiast osobno wykonywać kolejne przekształcenia x' = x \cdot M_1, x'' = x' \cdot M_2, \ldots, x^{(n)} = x^{(n-1)} \cdot M_n, można najpierw wykonać mnożenie odpowiednich macierzy M = M_1 \cdot M_2 \cdots M_n, później zaś używać wynikowej macierzy x' = x \cdot M. Czyli zamiast wykonywać n mnożeń punktu przez macierze, to samo uzyskuje się jednym mnożeniem punktu przez macierz, dzięki uprzedniemu wykonaniu n-1 mnożeń macierzy.

Za pomocą macierzy przekształceń we współrzędnych jednorodnych można także zwięźle opisać rzut perspektywiczny:


\begin{bmatrix}x'\\y'\\z'\\W'\end{bmatrix} = M \cdot X =
\begin{bmatrix}
1 & 0 & 0 & 0 \\
0 & 1 & 0 & 0 \\
0 & 0 & 1 & 0 \\
0 & 0 & \frac 1 d & 0
\end{bmatrix} \cdot
\begin{bmatrix}x\\y\\z\\W\end{bmatrix} =
\begin{bmatrix}
x\\
y\\
z\\
\frac z d
\end{bmatrix}

Przy przejściu na współrzędne kartezjańskie otrzymuje się: \left[\frac x {z/d}, \frac y {z/d}, d\right]^T.

Obcinanie[edytuj | edytuj kod]

W grafice trójwymiarowej istotnym elementem wizualizacji jest obcinanie sceny trójwymiarowej do tzw. ostrosłupa widzenia. Jest to ostrosłup (dokładnie: ostrosłup ścięty), zdefiniowany przez wirtualną kamerę, w obrębie którego znajdują się obiekty widoczne w danym rzucie. Jednak obcinanie względem ostrosłupa widzenia jest dość skomplikowane obliczeniowo, dlatego można przekształcić ostrosłup widzenia w sześcian. Obcinanie względem sześcianu jest bardzo efektywne, jednak aby po takim przekształceniu zapewnić poprawność wyników, obcinanie musi zostać wykonane we współrzędnych jednorodnych. Jest to powszechnie stosowane podejście w rozwiązaniach sprzętowych.

Także obcinanie wymiernych krzywych B-sklejanych we współrzędnych trójwymiarowych może nie dać prawidłowych wyników, natomiast obcinanie we współrzędnych jednorodnych gwarantuje poprawność wyniku.

Zobacz też[edytuj | edytuj kod]