def central_projection_matrix(self, C): # Матрица поворота вокруг осей OZ и OX self.create_rotation_matrix(C) # Создаем копию, т.к. это изменяемый объект. mtx = self.rotation_matrix.copy() # Отражение относительно плоскости YOZ mtx = mtx * TransformationMatrix.reflection_yoz() # При центральном проецировании if self.mode == "central": # Координата наблюдателя: длина радиус-вектора точки наблюдателя observer_z = math.sqrt(C.x*C.x + C.y*C.y + C.z*C.z) # Центральное преобразование для плоскости XOY mtx = mtx * TransformationMatrix.central_xoy(observer_z) # Ортогональное проецирование на плоскость XOY (плоскость экрана) mtx = mtx * TransformationMatrix.ortogonal_projection_xoy() # Перенос в начало координата экрана. mtx = mtx * TransformationMatrix.transfer(self.x0, self.y0, 0) self.transformation_matrix = mtx
def central_projection_matrix(self, C): # Матрица поворота вокруг осей OZ и OX self.create_rotation_matrix(C) # Создаем копию, т.к. это изменяемый объект. mtx = self.rotation_matrix.copy() # Отражение относительно плоскости YOZ mtx = mtx * TransformationMatrix.reflection_yoz() # При центральном проецировании if self.mode == "central": # Координата наблюдателя: длина радиус-вектора точки наблюдателя observer_z = math.sqrt(C.x * C.x + C.y * C.y + C.z * C.z) # Центральное преобразование для плоскости XOY mtx = mtx * TransformationMatrix.central_xoy(observer_z) # Ортогональное проецирование на плоскость XOY (плоскость экрана) mtx = mtx * TransformationMatrix.ortogonal_projection_xoy() # Перенос в начало координата экрана. mtx = mtx * TransformationMatrix.transfer(self.x0, self.y0, 0) self.transformation_matrix = mtx print("THIS IS IT:\n", self.transformation_matrix)
def create_rotation_matrix(self, C): oz_angle = math.atan2(C.x, C.y) length = math.sqrt(C.x*C.x + C.y*C.y) ox_angle = math.atan2(length, C.z) self.rotation_matrix = TransformationMatrix.rotation_oz(oz_angle)*TransformationMatrix.rotation_ox(ox_angle)
def create_rotation_matrix(self, C): oz_angle = math.atan2(C.x, C.y) length = math.sqrt(C.x * C.x + C.y * C.y) ox_angle = math.atan2(length, C.z) self.rotation_matrix = TransformationMatrix.rotation_oz( oz_angle) * TransformationMatrix.rotation_ox(ox_angle)