import math
################################################################################
## Class Triangulo
################################################################################
class Triangulo:
def __init__(self, sideA=0.0, sideB=0.0, sideC=0.0 ):
"""
Inicializa un objeto clase Triangulo.
"""
self.__sideA = 0.0
self.__sideB = 0.0
self.__sideC = 0.0
self.__valid = False
pass # REEMPLAZAR
def __validate( self ):
if (self.sideA<0 or self.sideB<0 or self.sideC<0):
self.__sideA=0
self.__sideB=0
self.__sideC=0
if (self.sideA<self.sideB+self.sideC and self.sideB<self.sideA+self.sideC and self.sideC<self.sideA+self.sideB):
self.__sideA=0
self.__sideB=0
self.__sideC=0
@property
def sideA(self):
return self.__sideA
@property
def sideB(self):
return self.__sideB
@property
def sideC(self):
return self.__sideC
@sideA.setter
def sideA(self, val):
if isinstance (val, int):
if val>0:
self.__sideA=val
else:
self.__sideA= 0
else:
self.__sideA=0
@sideB.setter
def sideB(self, val):
if isinstance (val, int):
if val>0:
self.__sideB=val
else:
self.__sideB= 0
else:
self.__sideB=0
@sideC.setter
def sideC(self, val):
if isinstance (val, int) and val>0:
if val>0:
self.__sideC=val
else:
self.__sideC= 0
else:
self.__sideC=0
def __repr__( self ):
return "Triangulo({:.1f},{:.1f},{:.1f})".format(self.sideA, self.sideB, self.sideC)
def is_valid( self ):
return self.sideA>0 and self.sideB>0 and self.sideC>0 and (self.sideA>self.sideB+self.sideC or self.sideB>self.sideA+self.sideC or self.sideC>self.sideA+self.sideB)
def is_equilateral( self ):
if self._sideA==self._sideB and self._sideA==self._sideC:
return True
else:
return False
def is_isosceles( self ):
if self._sideA==self._sideB and self._sideA!=self._sideC:
return True
else:
return False
def is_scalene( self ):
if self._sideA!=self._sideB and self._sideA!=self._sideC:
return True
else:
return False
def sides( self ):
return (self.sideA, self.sideB, self.sideC)
def angles( self ):
angA = math.acos((-self.sideA*2+self.sideB2+self.sideC*2)/(2*self.sideB*self.sideC))
angB = math.acos((-self.sideB*2+self.sideA2+self.sideC*2)/(2*self.sideA*self.sideC))
angC = math.acos((-self.sideC*2+self.sideA2+self.sideB*2)/(2*self.sideB*self.sideA))
GradA= round(angA*180/math.pi,1)
GradB= round(angB*180/math.pi,1)
GradC= round(angC*180/math.pi,1)
def perimeter( self ):
perimetro= float(self.sideA+self.sideB+self.sideC)
return perimetro
def area( self ):
p=self.sideA+self.sideB+self.sideC
sp=p/2
area=float((sp*(sp-self.sideA)*(sp-self.sideB)*(sp-self.sideC))*0.5)
return area
def scale( self, factor=1.0 ):
if (factor>0):
self._sideA= factor*self._sideA
self._sideB= factor*self._sideB
self._sideC= factor*self._sideC