|
@@ -0,0 +1,43 @@
|
|
|
+;;;; 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)))
|
|
|
+ (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)))
|