001 (ns walkmap.geometry
002 (:require [clojure.math.combinatorics :as combo]
003 [clojure.math.numeric-tower :as m]
004 [walkmap.edge :as e]
005 [walkmap.path :refer [path? polygon->path]]
006 [walkmap.polygon :refer [polygon?]]
007 [walkmap.vertex :as v]))
008
009 (defn on?
010 "True if the vertex `v` is on the edge `e`."
011 [e v]
012 (let [p (v/ensure3d (:start e))
013 q (v/ensure3d v)
014 r (v/ensure3d (:end e))]
015 (and
016 (e/collinear? p q r)
017 (<= (:x q) (max (:x p) (:x r)))
018 (>= (:x q) (min (:x p) (:x r)))
019 (<= (:y q) (max (:y p) (:y r)))
020 (>= (:y q) (min (:y p) (:y r)))
021 (<= (:z q) (max (:z p) (:z r)))
022 (>= (:z q) (min (:z p) (:z r))))))
023
024