Processing math: 100%

02 - 3D forgatás

Az x y és z tengely körüli forgatások mátrixai a következő alakot öltik: Rx(α)=(1000cosαsinα0sinαcosα),Ry(α)=(cosα0sinα010sinα0cosα),Rz(α)=(cosαsinα0sinαcosα0001).

A solve() függvény segítségével határozzuk meg, hogy melyik az az u vektor, melyre igaz az, hogy Rx(π/3)Rz(π/7)Ry(π/5)u=(1374236)

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.]])