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