Как лучше всего построить программу на Ruby, которая решает различные треугольники: в частности, треугольники AAS, ASA, SAS, SSA и SSS.
Существует только три различных решения: использованиезакон синусов, закон косинусов и все углы в сумме составляют 180.
Я играл с различными реализациями этого, но я не могу найти хороший чистый способ сделать это красиво и сухо.
В настоящее время я делаю что-то вроде этого:
def solve
#AA
!self.A && self.B && self.C ? self.A = 180 - (self.B + self.C) : false
!self.B && self.A && self.C ? self.B = 180 - (self.A + self.C) : false
!self.C && self.B && self.A ? self.C = 180 - (self.B + self.A) : false
#AAS
!self.a && self.A && self.C && self.c ? self.a = (self.c * Math.sin(self.A.degrees))/Math.sin(self.C.degrees) : false
!self.b && self.B && self.C && self.c ? self.b = (self.c * Math.sin(self.B.degrees))/Math.sin(self.C.degrees) : false
end
По сути, я в конечном итоге получаю список всех возможных способов ее решения, перебираю их и беру первыйтот, который разрешим.Затем повторите цикл и сделайте второй удар, пока решения не будут найдены.Но это совсем не СУХОЙ.
Как бы вы напали на это?