예제 #1
0
    def get_pixel_local(self, linha, coluna):
        """Retorna o Ponto3D na linha e coluna do plano de projeção
        especificados pelos argumentos, no sistema de coordenadas
        local da câmara.
        """

        pixel_x = self.canto_superior_esquerdo_x \
            + (coluna - 1) * self.incremento_horizontal
        pixel_y = self.canto_superior_esquerdo_y \
            - (linha - 1) * self.incremento_vertical
        pixel_z = self.canto_superior_esquerdo_z

        return Ponto3D(pixel_x, pixel_y, pixel_z)
예제 #2
0
    def local_para_global(self, ponto):
        """Converte o Ponto3D ponto do sistema de coordendas da câmara
        para o sistema de coordenadas global.
        """

        local_x = ponto.get_x()
        local_y = ponto.get_y()
        local_z = ponto.get_z()

        p = Matriz(4, 1)

        p.set_entrada(1, 1, local_x)
        p.set_entrada(2, 1, local_y)
        p.set_entrada(3, 1, local_z)
        p.set_entrada(4, 1, 1.0)  # porque é um ponto

        p_transformado = self.matriz * p

        global_x = p_transformado.get_entrada(1, 1)
        global_y = p_transformado.get_entrada(2, 1)
        global_z = p_transformado.get_entrada(3, 1)

        return Ponto3D(global_x, global_y, global_z)
예제 #3
0
           or beta > 1.0 \
           or lamb_da < 0.0 \
           or lamb_da > 1.0 \
           or alfa < 0.0 \
           or alfa > 1.0:

            return [False, None, None]
        else:
            return [True, ponto_intercecao, t]


# testes
if __name__ == "__main__":

    # teste ao construtor
    a = Ponto3D(0.0, 0.0, 0.0)
    b = Ponto3D(2.0, 0.0, 0.0)
    c = Ponto3D(0.0, 2.0, 0.0)
    plano1 = Plano(a, b, c)
    print("Até aqui não foram lançadas exceções.")
    # teste a TOLERANCIA_ZERO
    print("TOLERANCIA_ZERO = " + str(TOLERANCIA_ZERO))
    # teste à exceção ErroPontosColineares
    try:
        plano2 = Plano(a, b, b)
    except ErroPontosColineares:
        print("Ao tentar definir-se o plano plano2 = Plano(a, b, b)")
        print("foi lançada a exceção ErroPontosColineares.")
        print("A execução foi interrompida. plano2 não ficou definido.")

    # teste a __str__
예제 #4
0
        especificados pelos argumentos, no sistema de coordenadas
        global onde a câmara está inserida.
        """

        pixel_local = self.get_pixel_local(linha, coluna)

        pixel_global = self.local_para_global(pixel_local)

        return pixel_global


# testes
if __name__ == "__main__":

    # teste ao construtor
    posicao = Ponto3D(0.0, 0.0, 3.0)
    olhar_para = Ponto3D(0.0, 0.0, 0.0)
    vertical = Vetor3D(0.0, 1.0, 0.0)
    distancia_olho_plano_projecao = 2.0
    largura_retangulo_projecao = 2.0
    altura_retangulo_projecao = 2.0
    resolucao_horizontal = 5
    resolucao_vertical = 5

    camara = Camara(posicao, olhar_para, vertical,
                    distancia_olho_plano_projecao, largura_retangulo_projecao,
                    altura_retangulo_projecao, resolucao_horizontal,
                    resolucao_vertical)

    # teste a __str__
    print(camara)
예제 #5
0
        direcao_olho = raio.vetor_diretor
        cor_face = self.get_cor_face(face_int, pi, direcao_olho)

        return cor_face


# testes
if __name__ == "__main__":

    # teste ao construtor
    # teste ao construtor - cor da face
    verde = CorRGB(0.0, 0.3, 0.0)
    brilho = 100.0
    cor = CorPhong(verde, verde, verde, brilho)
    # teste ao construtor - face
    p1 = Ponto3D(0.0, 0.0, 0.0)
    p2 = Ponto3D(1.0, 0.0, 0.0)
    p3 = Ponto3D(0.0, 1.0, 0.0)
    face = FaceTriangular(p1, p2, p3, cor)
    lista_faces = [face]
    # teste ao construtor - luz
    branco = CorRGB(1.0, 1.0, 1.0)
    luz_posicao = Ponto3D(1.0, 0.0, 2.0)
    luz = Luz(luz_posicao, branco, branco, branco)
    lista_luzes = [luz]
    # teste ao construtor - camara
    camara_posicao = Ponto3D(0.0, 0.0, 2.0)
    olhar_para = Ponto3D(0.0, 0.0, 0.0)
    vertical = Vetor3D(0.0, 1.0, 0.0)
    distancia_olho_plano_projecao = 1.5
    largura_retangulo_projecao = 2.0
예제 #6
0
        """Retorna uma string que representa a face triangular."""

        return ("FaceTriangular(" + super().__str__() + ", " +
                str(self.cor_phong) + ")")

    def get_cor_phong(self):
        """Retorna a cor Phong da face triangular."""

        return self.cor_phong


# testes
if __name__ == "__main__":

    # teste ao construtor
    a = Ponto3D(0.0, 0.0, 0.0)
    b = Ponto3D(1.0, 0.0, 0.0)
    c = Ponto3D(0.0, 1.0, 0.0)
    k_ambiente = CorRGB(0.0, 0.0, 0.1)
    k_difusa = CorRGB(0.0, 0.0, 0.75)
    k_especular = CorRGB(1.0, 1.0, 1.0)
    brilho = 100.0
    cor = CorPhong(k_ambiente, k_difusa, k_especular, brilho)
    face1 = FaceTriangular(a, b, c, cor)
    print("Até aqui não foram lançadas exceções.")
    # teste à exceção ErroPontosColineares
    try:
        face2 = FaceTriangular(a, a, c, cor)
    except ErroPontosColineares:
        print(
            "Ao tentar definir-se a face face2 = FaceTriangular(a, a, c, cor)")
예제 #7
0
# testes
if __name__ == "__main__":

    # teste ao construtor
    material_k_ambiente = CorRGB(0.0, 0.0, 0.1)
    material_k_difusa = CorRGB(0.0, 0.0, 0.9)
    material_k_especular = CorRGB(1.0, 1.0, 1.0)
    material_brilho = 100.0
    material_cor = CorPhong(material_k_ambiente, material_k_difusa,
                            material_k_especular, material_brilho)

    # teste a __str__
    print(material_cor)

    # teste a get_cor_rgb
    luz_posicao = Ponto3D(1.0, 0.0, 1.0)
    luz_intensidade_ambiente = CorRGB(1.0, 1.0, 1.0)
    luz_intensidade_difusa = CorRGB(1.0, 1.0, 1.0)
    luz_intensidade_especular = CorRGB(1.0, 1.0, 1.0)
    luz = Luz(
        luz_posicao,
        luz_intensidade_ambiente,
        luz_intensidade_difusa,
        luz_intensidade_especular,
    )
    # olho
    olho = Ponto3D(-1.0, 0.0, 1.0)

    # normal
    n_pontos = 100
    incremento = 0.02  # 2.0/100.0
예제 #8
0
            raise (ErroPontosCoincidentes)

        self.vetor_diretor = direcao.normaliza()

    def __str__(self):
        """Retorna uma string que representa a reta."""

        return("Reta(" + str(self.origem) + ", " + str(self.destino) + ", " \
                   + str(self.vetor_diretor) + ")")


# testes

if __name__ == "__main__":

    # teste ao construtor
    p1 = Ponto3D(0.0, 0.0, 0.0)
    p2 = Ponto3D(1.0, 2.0, 3.0)
    r1 = Reta(p1, p2)
    print("Até aqui não foram lançadas exceções.")
    # teste à exceção ErroPontosCoincidentes
    try:
        r2 = Reta(p2, p2)
    except ErroPontosCoincidentes:
        print("Ao tentar definir-se a reta r2 = Reta(p2, p2)")
        print("foi lançada a exceção ErroPontosCoincidentes.")
        print("A execução foi interrompida. r2 não ficou definida.")

    # teste a __str__
    print(r1)
예제 #9
0
        # i_ significa intensidade_
        # a posição é um objeto Ponto3D
        # as intensidades são objetos CorRGB

        self.posicao = posicao
        self.intensidade_ambiente = intensidade_ambiente
        self.intensidade_difusa = intensidade_difusa
        self.intensidade_especular = intensidade_especular

    def __str__(self):

        return ("Luz(" + str(self.posicao) + ", " +
                str(self.intensidade_ambiente) + ", " +
                str(self.intensidade_difusa) + ", " +
                str(self.intensidade_especular) + ")")


if __name__ == "__main__":

    # teste ao construtor
    posicao = Ponto3D(1.0, 0.0, 3.0)
    intensidade_ambiente = CorRGB(0.1, 0.2, 0.3)
    intensidade_difusa = CorRGB(0.4, 0.5, 0.6)
    intensidade_especular = CorRGB(0.7, 0.8, 0.9)
    luz = Luz(posicao, intensidade_ambiente, intensidade_difusa,
              intensidade_especular)

    # teste a __str__
    print(luz)