02 - 3D forgatás

Az $x$ $y$ és $z$ tengely körüli forgatások mátrixai a következő alakot öltik: $$ R_x(\alpha)=\begin{pmatrix} 1 & 0 & 0 \\ 0 & \cos\alpha & -\sin\alpha \\ 0 & \sin\alpha & \cos\alpha \end{pmatrix}, \quad R_y(\alpha)=\begin{pmatrix} \cos\alpha & 0 & \sin\alpha \\ 0 & 1 & 0 \\ -\sin\alpha & 0 & \cos\alpha \end{pmatrix}, \quad R_z(\alpha)=\begin{pmatrix} \cos\alpha & -\sin\alpha & 0 \\ \sin\alpha & \cos\alpha & 0 \\ 0 & 0 & 1 \end{pmatrix}. $$

A solve() függvény segítségével határozzuk meg, hogy melyik az az $u$ vektor, melyre igaz az, hogy $$ R_x(\pi/3)R_z(\pi/7)R_y(\pi/5)u= \begin{pmatrix} 137 \\ 42 \\ 36 \end{pmatrix} $$

Megoldás

Először meghívjuk a pylab csomagot.

In [1]:
%pylab inline
Populating the interactive namespace from numpy and matplotlib

Ezután definiálunk függvényeket, amik segítségével megkapjuk a bizonyos tengelyek körül elforgató mátrixokat.

In [2]:
def R_x(alpha):
    '''Visszaadja az x tengely körül, alpha szöggel elforgató mátrixot'''
    return matrix([[1, 0, 0], [0, cos(alpha), -sin(alpha)], [0, sin(alpha), cos(alpha)]])

def R_y(alpha):
    '''Visszaadja az y tengely körül, alpha szöggel elforgató mátrixot'''
    return matrix([[cos(alpha), 0, sin(alpha)], [0, 1, 0], [-sin(alpha), 0, cos(alpha)]])

def R_z(alpha):
    '''Visszaadja a z tengely körül, alpha szöggel elforgató mátrixot'''
    return matrix([[cos(alpha), -sin(alpha), 0], [sin(alpha), cos(alpha), 0], [0, 0, 1]])

Majd megoldjuk az egyenletet a solve() függvény segítségével.

In [3]:
u = solve(R_x(pi/3) * R_z(pi/7) * R_y(pi/5), matrix([[137], [42], [36]]))
u
Out[3]:
matrix([[ 128.97370298],
        [ -12.43229664],
        [  70.99452049]])

Végül, megbizonyosodunk róla, hogy a kapott vektor valóban a feladat megoldása.

In [4]:
R_x(pi/3) * R_z(pi/7) * R_y(pi/5) * u
Out[4]:
matrix([[ 137.],
        [  42.],
        [  36.]])