コード例 #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 coordenads 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
ファイル: luz_39205.py プロジェクト: dmpfernandes/Portfolio
        return (self.posicao)

    def get_intensidade_ambiente(self):
        return (self.intensidade_ambiente)

    def get_intensidade_difusa(self):
        return (self.intensidade_difusa)

    def get_intensidade_especular(self):
        return (self.intensidade_especular)
    
# testes
if __name__ == "__main__":

    # teste ao construtor
    posicao = Ponto3D(1.0, 2.0, 3.0)
    i_ambiente = CorRGB(0.1, 0.2, 0.3)
    i_difusa = CorRGB(0.4, 0.5, 0.6)
    i_especular = CorRGB(0.7, 0.8, 0.9)
    luz = Luz(posicao, i_ambiente, i_difusa, i_especular)

    # teste a __str__
    print(luz)
    print(" ")
    
    # teste a get_posicao
    print(luz.get_posicao())
    print(" ")

    # teste a get_intensidade_ambiente
    print(luz.get_intensidade_ambiente())
コード例 #4
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 = Ponto3D(-1.0, 0.0, 1.0)
    n_pontos = 100
    imagem = Imagem(100, 100)
    incremento = 0.02  # 2.0/100.0
    normal = Vector3D(0.0, 0.0, 1.0)
    sombra = False

    for m in range(100):  # indice de linhas
        for n in range(100):  # indice de colunas
            ponto = Ponto3D(-1.0 + n * incremento, 1.0 - m * incremento, 0)
コード例 #5
0
        if direcao.comprimento() < TOLERANCIA_ZERO:
            raise (ErroPontosCoincidentes)

        self.vector_diretor = direcao.versor()

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

        return("Recta(" + str(self.origem) + ", " + str(self.destino) + ", " \
                    + str(self.vector_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 = Recta(p1, p2)
    print("Até aqui não foram lançadas exceções.")
    # teste à exceção ErroPontosCoincidentes
    try:
        r2 = Recta(p2, p2)
    except ErroPontosCoincidentes:
        print("Ao tentar definir-se a recta r2 = Recta(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)
コード例 #6
0
                cor = ray_tracer.get_cor_vista_por_raio(recta)
                imagem.set_cor(l, c, cor)

        return (imagem)


# 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 = Vector3D(0.0, 1.0, 0.0)
コード例 #7
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 = Vector3D(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)
コード例 #8
0
ファイル: face_39205.py プロジェクト: dmpfernandes/Portfolio
        self.cor_phong = cor_phong

    def __str__(self):
        """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)")
コード例 #9
0
ファイル: plano_39205.py プロジェクト: dmpfernandes/Portfolio
        # ponto a = ponto 1, ponto b = ponto 2, ponto c = ponto 3
        #
        # P = a + beta(b-a) + gama(c-a)
        vab = self.ponto2 - self.ponto1
        vac = self.ponto3 - self.ponto1

        pontoIntercecao = (self.ponto1 + vab * beta) + vac * gama

        return (True, pontoIntercecao, 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 definida.")
        print(" ")
    # teste a __str__