solve-triangle.lisp 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. ;;;; solve-triangle.lisp
  2. (defpackage #:solve-triangle
  3. (:use :cl)
  4. (:export #:solve-asa
  5. #:solve-ssa))
  6. (in-package #:solve-triangle)
  7. ;; SAA, ASA -- Law of Sines
  8. ;; SSA -- Law of Sines, (or 0 1 2) solutions
  9. ;; SAS -- Law of Cosines
  10. ;; SSS -- Law of Cosines
  11. (defun solve-asa (anglea sidea angleb)
  12. "Solve a ASA triangle using the method of sines. Angles assumed to be in degrees."
  13. (let* ((anglec (- 180 anglea angleb))
  14. (sideb (/ (* (sin angleb)
  15. sidea)
  16. (sin anglea)))
  17. (sidec (/ (* (sin anglec)
  18. sidea)
  19. (sin anglea))))
  20. (list :angle-a anglea
  21. :angle-b angleb
  22. :angle-c anglec
  23. :side-a sidea
  24. :side-b sideb
  25. :side-c sidec)))
  26. (defun solve-ssa (sidea sideb anglea)
  27. "Solve an SSA triangle using the method of sines. Angles are assumed to be in degrees."
  28. (let ((angleb (asin (/ (* sideb (sin anglea))
  29. sidea))))
  30. (cond
  31. ((< 1 angleb) nil)
  32. (())))
  33. (let* ((angleb (asin (/ (* sideb (sin anglea))
  34. sidea)))
  35. (anglec (- 180 anglea angleb))
  36. (sidec (/ (* (sin anglec)
  37. sidea)
  38. (sin anglea))))
  39. (list :angle-a anglea
  40. :angle-b angleb
  41. :angle-c anglec
  42. :side-a sidea
  43. :side-b sideb
  44. :side-c sidec)))