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.

ensure2d

If o is a vertex, set its :z value to zero; else throw an exception.

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.