Primeira vez aqui? Seja bem vindo e cheque o FAQ!
x

Crie classes para um retângulo e um triângulo

0 votos
12 visitas
perguntada Nov 4 em Ciência da Computação por Fábio Springer (11 pontos)  

Faça classes para um retângulo e um triângulo.
O objetivo deste exercício é criar classes como a classe Circle
do Capítulo 7.2.3 para representar outras figuras geométricas: um retângulo
com largura W, altura H e canto inferior esquerdo (x0, y0); e o
triângulo especificado por seus três vértices (x0, y0), (x1, y1) e (x2, y2) .

A imagem a baixo apresenta o código do exemplo 7.2.3

A imagem será apresentada aqui.

Exercício número 7.3 do livro Primer on Scientific Programming with Python: 6 por Hans Petter Langtangen.

Compartilhe

1 Resposta

+1 voto
respondida Nov 4 por Fábio Springer (11 pontos)  
editado Nov 8 por Fábio Springer

Um triângulo arbitrário pode ser definido pelas coordenadas dos seus três vertices \((x_0,y_0),(x_1,y_1),(x_2,y_2)\) numerados no sentido horário. A área desse triângulo será dada por: \(A = \frac{1}{2}[x_{1}y_{2}-x_{2} y_{1}-x_{0}y_{2}+x_{2}y_{0}+x_{0}y_{1}-x_{1}y_0]\).
O perímetro do triângulo é dado pela soma das distâncias, logo usando a distância entre dois pontos e somando temos o perímetro.

Podemos então desenvolver a classe triângulo

class triangulo:
    def __init__(self, x0, y0, x1, y1, x2, y2):
    self.x0, self.y0, self.x1, self.y1, self.x2, self.y2 =  x0, y0, x1, y1, x2, y2
    def area(self):
        return 0.5 * (self.x1 * self.y2 - self.x2 * self.y1 - self.x0 * self.y2 + self.x2 * self.y1 - self.x1 * self.y0 ) 
    def perimetro(self):
        return sqrt((self.x0 - self.x1)**2) + sqrt((sel.y0 - self.y1))**2) + sqrt((self.x1 - self.x2)**2) + sqrt((sel.y1 - self.y2))**2) + sqrt((self.x0 - self.x3)**2) + sqrt(self.y0 - self.y3)**2)

Para desenvolver a classe retângulo só precisamos de dois parâmetros, a area é produto da altura pela largura e o perímetro é igual a soma da altura e largura multiplicado por dois.

class retangulo:
    def __init__(self, H , W):
        self.H, self.W = H, W
    def area(self):
        return self.W * self.H
    def perimetro(self):
        return (self.W + self.H) * 2
comentou Nov 6 por pedro zarur (6 pontos)  
Fábio, parabéns pela resolução! É excelente ter posts assim para, no início, entendermos melhor o funcionamento das classes. Só tenho dois comentários:

1) me parece que, no cálculo do perímetro da classe do triângulo, na soma dos pontos \((x_{0}, y_{0})\) e \((x_{1}, y_{1})\)  e dos pontos \((x_{1}, y_{1})\) e \((x_{2}, y_{2})\), a segunda vez que você eleva ao quadrado ficou fora do parênteses da raiz quadrada.

2) nessa mesma linha, algumas vezes você escreveu "sel" ao invés de "self".

Ambos certamente foram só erro de digitação mesmo. Mais uma vez, parabéns pela resolução! Abraço
comentou Nov 8 por Fábio Springer (11 pontos)  
Obrigado pelas correções, fiz alteração nos códigos.
...