Prechádzať zdrojové kódy

started triangle solving library

Samuel W. Flint 9 rokov pred
rodič
commit
173ada009f
1 zmenil súbory, kde vykonal 43 pridanie a 0 odobranie
  1. 43 0
      solve-triangle.lisp

+ 43 - 0
solve-triangle.lisp

@@ -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)))