123456789101112131415161718192021222324252627282930313233343536373839404142434445464748 |
- ;;;; solve-triangle.lisp
- (defpackage #:solve-triangle
- (:use :cl)
- (:export #:solve-asa
- #:solve-ssa))
- (in-package #:solve-triangle)
- ;; SAA, ASA -- Law of Sines
- ;; SSA -- Law of Sines, (or 0 1 2) solutions
- ;; SAS -- Law of Cosines
- ;; SSS -- Law of Cosines
- (defun solve-asa (anglea sidea angleb)
- "Solve a ASA triangle using the method of sines. Angles assumed to be in degrees."
- (let* ((anglec (- 180 anglea angleb))
- (sideb (/ (* (sin angleb)
- sidea)
- (sin anglea)))
- (sidec (/ (* (sin anglec)
- sidea)
- (sin anglea))))
- (list :angle-a anglea
- :angle-b angleb
- :angle-c anglec
- :side-a sidea
- :side-b sideb
- :side-c sidec)))
- (defun solve-ssa (sidea sideb anglea)
- "Solve an SSA triangle using the method of sines. Angles are assumed to be in degrees."
- (let ((angleb (asin (/ (* sideb (sin anglea))
- sidea))))
- (cond
- ((< 1 angleb) nil)
- (())))
- (let* ((angleb (asin (/ (* sideb (sin anglea))
- sidea)))
- (anglec (- 180 anglea angleb))
- (sidec (/ (* (sin anglec)
- sidea)
- (sin anglea))))
- (list :angle-a anglea
- :angle-b angleb
- :angle-c anglec
- :side-a sidea
- :side-b sideb
- :side-c sidec)))
|