получить обратно в Clojure, и я написал эту маленькую вещь, чтобы проверить, если две коробки сталкиваясь, проверяя, если вершины одного внутри другого:идиоматический диапазон clojure/проверка столкновения?
(defn around
[val radius]
(let [half (/ radius 2)
low (- val half)
high (+ val half)]
[low high]))
(defn colliding?
[this that]
(let [[this-x1 this-x2] (around (:x this) (:w this))
[this-y1 this-y2] (around (:y this) (:h this))
[this-z1 this-z2] (around (:z this) (:l this))
[that-x1 that-x2] (around (:x that) (:w that))
[that-y1 that-y2] (around (:y that) (:h that))
[that-z1 that-z2] (around (:z that) (:l that))]
(or (and (or (<= that-x1 this-x1 that-x2)
(<= that-x1 this-x2 that-x2))
(or (<= that-y1 this-y1 that-y2)
(<= that-y1 this-y2 that-y2))
(or (<= that-z1 this-z1 that-z2)
(<= that-z1 this-z2 that-z2)))
(and (or (<= this-x1 that-x1 this-x2)
(<= this-x1 that-x2 this-x2))
(or (<= this-y1 that-y1 this-y2)
(<= this-y1 that-y2 this-y2))
(or (<= this-z1 that-z1 this-z2)
(<= this-z1 that-z2 this-z2))))))
это пахнет очень плохо из-за повторения, но я не что лучший подход для очистки этого. Есть лучший способ сделать это?
Это определенно то, что я думал, возможно, спасибо! он чувствует намного лучше обрабатывать параметры xyz/whl на карте. упрощение математики также помогает. – xen