Skip to content

Instantly share code, notes, and snippets.

@amithgeorge
Created July 31, 2015 01:13
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save amithgeorge/15b1cb607c32d39b70c7 to your computer and use it in GitHub Desktop.
Save amithgeorge/15b1cb607c32d39b70c7 to your computer and use it in GitHub Desktop.
(defn- squared-edge-values
[edges]
(->> [:oc :oa :ob :ca :ab :bc]
(map #(edges %1))
(map #(* %1 %1))))
(defn- opposite-edge-values
[edges]
(let [[a2 b2 c2 d2 e2 f2] (squared-edge-values edges)]
[[a2 e2 (+ a2 e2)]
[b2 f2 (+ b2 f2)]
[c2 d2 (+ c2 d2)]]))
(defn- closed-edge-values
[edges]
(let [[a2 b2 c2 d2 e2 f2] (squared-edge-values edges)]
[[a2 b2 d2]
[d2 e2 f2]
[b2 c2 e2]
[a2 c2 f2]]))
(defn- open-edge-values
[edges]
;; implement later
[[0 0 0]])
(defn- compute-edge-values
[edge-fn edges]
(->> edges
(edge-fn)
(map (fn [[x y z]] (* x y z)))
(reduce +)))
(def ^:private add-opposite (partial compute-edge-values opposite-edge-values))
(def ^:private add-closed (partial compute-edge-values closed-edge-values))
(def ^:private add-open (partial compute-edge-values open-edge-values))
(defn volume
[{:keys [oa ob oc ab bc ca] :as edges}]
{:pre [(every? #(number? %1) [oa ob oc ab bc ca])]}
(let [opposite (add-opposite edges)
closed (add-closed edges)
open (add-open edges)]
(Math/sqrt (* (- (- open closed) opposite) 0.5))))
(defn a-mod-input
[]
(let [a 1.0]
{:oc (* a (/ (Math/sqrt 6.0) 12.0))
:oa (* a (/ (Math/sqrt 6.0) 4.0))
:ob (* a (/ (Math/sqrt 2.0) 4.0))
:ca (* a (/ (Math/sqrt 3.0) 3.0))
:ab (/ a 2.0)
:bc (* a (/ (Math/sqrt 3.0) 6.0))}))
(defn e-mod-input
[]
(let [d 1.0
r (/ d 2.0)
h r]
{:oc h
:oa 1
:ob 1
:ca 1
:ab 1
:bc 1}))
(def a-mod-volume (volume (a-mod-input)))
(def e-mod-volume (volume (e-mod-input)))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment