# generative-toolbelt.triangle

A set of functions to create, manage, and draw Triangles. Triangles are sets with three Points like this: {:a {:x 100 :y 100} :b {:x 100 :y 100} :c {:x 100 :y 100}}.

### add-point-to-triangles

`(add-point-to-triangles triangles point)`

Add a point to the triangulated mesh. Takes a list of Triangles and a Point. Returns a list of Triangles.

### bounds

`(bounds points)`

Returns the bounding rectangle Point from a list of Points. Returns a vector of 4 Points.

### circumscribe-triangle

`(circumscribe-triangle {:keys [a b c]})`

Calculates a special Circle structure that circumscribe a Triangle. NOTE: The Circlo structure that this function returns is different from generative-toolbelt.circle/make-circle since it has been optimize for the triangulation function. Returns a special Circle structure.

### contains-point?

`(contains-point? {:keys [x y radius-squared]} point)`

Checks if a Point is inside the special Circle structure or not. Returns a boolean.

### draw-triangle

`(draw-triangle {:keys [a b c]} & [drawOptions])`

Draws a Triangle into the current graphics canvas.

### draw-triangles

`(draw-triangles triangles & [drawOptions])`

Draws a sequence of Triangles into the current graphics canvas. Slightly faster than draw-triangle when a lot of triangles needs to be drawn with the same `drawOptions`.

### edges

`(edges {:keys [a b c]})`

Scompose a Triangle into a vector of Lines.

### get-triangle-guide

`(get-triangle-guide tri)`

Gets an alternative form of the Triangle structure that tells where the longest side is and what are its opposite sides.

### is-from-bounds?

`(is-from-bounds? boundSet {:keys [a b c]})`

Checks if a Triangle is on a bounding box or not. Returns a boolean.

### make-new-triangles

`(make-new-triangles containers point)`

Creates new Triangles from a list of Triangles and a Point. Returns a list of Triangles.

### make-triangle

`(make-triangle a b c)`

Creates a Triangle with three Points. Returns a Triangle.

### mktr

`(mktr ax ay bx by cx cy)`

Creates a Triangle with canvas-relative coordinates. Returns a Triangle.

### move-triangle-by

`(move-triangle-by tri vect)`

Translate a Triangle by a certain distance Vector. Returns a new Triangle.

### outer-edges

`(outer-edges triangles)`

Gets the outer edges of a list of Triangles. Returns a list of Lines.

### split-recursive

`(split-recursive t depth maxdepth oddsToSplit)`

Recursivly splits a Triangle based on the current recursion depth and the odds to get split. `t` is a Triangle. `depth` is the current recursion step. `maxdepth` is the target recursion level. `oddsToSplit` is a 0-1 float indicating the odds to get split. Returns a non-flattened list of Triangles.

### split-triangle

`(split-triangle tri)`

Splits a Triangle by its longest side, creating two new Triangles. Returns a list of two Triangles.

### triangle-centroid

`(triangle-centroid tri)`

Calculate the centroid of a Triangle. Returns a Point.

### triangle-subdivision

`(triangle-subdivision triangles maxdepth oddsToSplit)`

Split a list of Triangles recursively. `maxdepth` is the maximum depth level we want to reach with the recursion. `oddsToSplit` is a 0-1 float indicating the odds to get split. Returns a flattened list of Triangles.

### triangulate

`(triangulate points)`

Creates a triangulated mesh from a list of Points. Full explanation paper here: http://paulbourke.net/papers/triangulate/ Returns a list of Triangles.