MedicalVisualization

Transformationsbeispiel

Skalierung | | Viewkoordinaten

Wir drücken die folgenden 2D Transformationen durch eine entsprechende homogene 3×3 Matrix aus:

  • Rotation R um 90 Grad entgegen dem Uhrzeigersinn
  • Translation T um den Vektor $(1,0)^T$
$ R = \left( \begin{array}{c c c} 0 & -1 & 0 \\ 1 & 0 & 0 \\ 0 & 0 & 1 \end{array} \right) $
$ T = \left( \begin{array}{c c c} 1 & 0 & 1 \\ 0 & 1 & 0 \\ 0 & 0 & 1 \end{array} \right) $

Wir berechnen die zusammengesetzte affine Transformationsmatrix:

$M = TR = $
$ = \left( \begin{array}{c c c} 1 & 0 & 1 \\ 0 & 1 & 0 \\ 0 & 0 & 1 \end{array} \right) \cdot \left( \begin{array}{c c c} 0 & -1 & 0 \\ 1 & 0 & 0 \\ 0 & 0 & 1 \end{array} \right) $
$ = \left( \begin{array}{c c c} 0 & -1 & 1 \\ 1 & 0 & 0 \\ 0 & 0 & 1 \end{array} \right) $

Und abschließend transformieren wir den Punkt $p = (2,0)^T$ mit der zusammengesetzten Matrix M:

$v' = M \cdot v$

Wir überprüfen zeichnerisch, dass der resultierende Punkt $(1,2)^T$ ist (und nicht $(0,3)^T$)!

Wir überprüfen das Ergebis programmiertechnisch mit GLM bzw. GLSLmath (für 4×4 Matrizen):

mat4 M = mat4::translate(1,0,0) * mat4::rotate(90, 0,0,1);
glslmath::print(M);

vec4 v(2,0,0,1);
vec4 vt = M*v;
glslmath::print(vt);

Live Demo

Skalierung | | Viewkoordinaten

Options: