Как лучше всего создать программу на 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
По сути, в итоге я получаю список всех возможных способов решения, перебираю их и выбираю первый решаемый. Затем снова выполните цикл и повторите попытку, пока решения не будут найдены. Но это совсем не СУХОЕ.
Как бы вы на это напали?