Source code for aerocaps.iges.transformation

import numpy as np

from aerocaps.iges.entity import IGESEntity
from aerocaps.iges.iges_param import IGESParam
from aerocaps.units.angle import Angle
from aerocaps.units.length import Length


[docs] class TransformationMatrixIGES(IGESEntity):
[docs] def __init__(self, yaw_z: Angle = Angle(deg=0.0), pitch_y: Angle = Angle(deg=0.0), roll_x: Angle = Angle(deg=0.0), tx: Length = Length(m=0.0), ty: Length = Length(m=0.0), tz: Length = Length(m=0.0) ): R_mat = self.generate_roll_pitch_yaw_matrix(yaw_z, pitch_y, roll_x) parameter_data = [ IGESParam(R_mat[0, 0], "real"), IGESParam(R_mat[0, 1], "real"), IGESParam(R_mat[0, 2], "real"), IGESParam(tx.m, "real"), IGESParam(R_mat[1, 0], "real"), IGESParam(R_mat[1, 1], "real"), IGESParam(R_mat[1, 2], "real"), IGESParam(ty.m, "real"), IGESParam(R_mat[2, 0], "real"), IGESParam(R_mat[2, 1], "real"), IGESParam(R_mat[2, 2], "real"), IGESParam(tz.m, "real") ] super().__init__(124, parameter_data)
@staticmethod def _generate_matrix_z(alpha: Angle): """ Generates the yaw matrix """ return np.array([ [np.cos(alpha.rad), -np.sin(alpha.rad), 0.0], [np.sin(alpha.rad), np.cos(alpha.rad), 0.0], [0.0, 0.0, 1.0] ]) @staticmethod def _generate_matrix_y(beta: Angle): """ Generates the pitch matrix """ return np.array([ [np.cos(beta.rad), 0.0, np.sin(beta.rad)], [0.0, 1.0, 0.0], [-np.sin(beta.rad), 0.0, np.cos(beta.rad)] ]) @staticmethod def _generate_matrix_x(gamma: Angle): """ Generates the roll matrix """ return np.array([ [1.0, 0.0, 0.0], [0.0, np.cos(gamma.rad), -np.sin(gamma.rad)], [0.0, np.sin(gamma.rad), np.cos(gamma.rad)] ]) def generate_roll_pitch_yaw_matrix(self, alpha: Angle, beta: Angle, gamma: Angle): yaw_matrix = self._generate_matrix_z(alpha) pitch_matrix = self._generate_matrix_y(beta) roll_matrix = self._generate_matrix_x(gamma) return (yaw_matrix @ pitch_matrix) @ roll_matrix