예제 #1
0
    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
예제 #2
0
    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)
예제 #3
0
 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)
예제 #4
0
 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)