def rotation_z(angle: float) -> Matrix: result = identity(4) result[0, 0] = math.cos(angle) result[0, 1] = -math.sin(angle) result[1, 0] = math.sin(angle) result[1, 1] = math.cos(angle) return result
def shearing(x_y: float, x_z: float, y_x: float, y_z: float, z_x: float, z_y: float) -> Matrix: result = identity(4) result[0, 1] = x_y result[0, 2] = x_z result[1, 0] = y_x result[1, 2] = y_z result[2, 0] = z_x result[2, 1] = z_y return result
def check_attribute(context, var, att, expected): if expected == "identity_matrix": exp = identity(4) # type: Union[Matrix, float] elif is_number(expected): exp = float(expected) elif expected == "true": exp = True elif expected == "false": exp = False else: exp = context.variables[expected] my_variable = context.variables[var] if att == "count": assert len(my_variable) == exp elif isinstance(exp, float) or isinstance(exp, int): assert equals(exp, getattr(my_variable, att)) else: assert getattr(my_variable, att) == exp, f"{getattr(my_variable, att)} == {exp}"
def identity_pre(context, var): matrix = context.variables[var] identity_matrix = identity(matrix.num_rows) assert identity_matrix * matrix == matrix
def check_equality(context, var_1, var_2): matrix_1 = context.variables[var_1] matrix_2 = identity( 4) if var_2 == "identity_matrix" else context.variables[var_2] assert matrix_1 == matrix_2
def assign_identity_transpose(context, var): identity_matrix = identity(4) context.variables[var] = transpose(identity_matrix) context.variables["identity_matrix"] = identity_matrix
def __init__(self) -> None: self.origin = point(0, 0, 0) self.radius = 1.0 self.transform = identity(4) self.material = Material()
def translation(x: float, y: float, z: float) -> Matrix: result = identity(4) result[0, 3] = x result[1, 3] = y result[2, 3] = z return result
def scaling(x: float, y: float, z: float) -> Matrix: result = identity(4) result[0, 0] = x result[1, 1] = y result[2, 2] = z return result