walkmap.vertex
Essentially the specification for things we shall consider to be vertices.
Note that there’s no distance
function here; to find the distance between two vertices, create an edge from them and use walkmap.edge/length
.
canonicalise
(canonicalise o)
If o
is a map with numeric values for :x
, :y
and optionally :z
, upgrade it to something we will recognise as a vertex.
ensure3d
Given a vertex o
, if o
has a :z
value, just return o
; otherwise return a vertex like o
but having thie dflt
value as the value of its :z
key, or zero as the value of its :z
key if dflt
is not specified.
If o
is not a vertex, throws an exception.
vertex
(vertex x y)
(vertex x y z)
Make a vertex with this x
, y
and (if provided) z
values. Returns a map with those values, plus a unique :id
value, and :kind
set to :vertex
. It’s not necessary to use this function to create a vertex, but the :id
must be present and must be unique.
vertex-key
(vertex-key o)
Making sure we get the same key everytime we key a vertex with the same coordinates. o
must have numeric values for :x
, :y
, and optionally :z
; it is an error and an exception will be thrown if o
does not conform to this specification.
Note: these keys can be quite long. No apology is made: it is required that the same key can never refer to two different locations in space.
vertex?
(vertex? o)
True if o
satisfies the conditions for a vertex. That is, essentially, that it must rerpresent a two- or three- dimensional vector. A vertex is shall be a map having at least the keys :x
and :y
, where the value of those keys is a number. If the key :z
is also present, its value must also be a number.
The name vector?
was not used as that would clash with a function of that name in clojure.core
whose semantics are entirely different.