Current section
Files
Jump to
Current section
Files
lib/collidex.ex
defmodule Collidex do
@moduledoc """
## Usage
### Points
Cartesian points are 2-tuples of the form {x, y}. I picked this format for
speed and for compatibility with [certrel/graphmath](https://hex.pm/packages/graphmath).
### Geometric primitives
Circles, Rects (grid-aligned rectangles), and Polygons are Elixir structs.
Each module has a make() function for creating them in common formats.
#### Circles
Circles can be made from three arguments (center_x, center_y, radius), or a
3-tuple specifying the same values.
```
iex> Collidex.Geometry.Circle.make(0.0, 0.0, 1.0)
%Collidex.Geometry.Circle{center: {0.0, 0.0}, radius: 1.0}
iex> Collidex.Geometry.Circle.make(1.0, 1.0, 1.0)
%Collidex.Geometry.Circle{center: {1.0, 1.0}, radius: 1.0}
```
#### Rects
Rects are grid-aligned rectangles delineated by two opposite corners.
`Rect.make` takes a pair of vectors:
```
iex(1)> Collidex.Geometry.Rect.make({0.0, 0.0}, {1.0, 1.0})
%Collidex.Geometry.Rect{a: {0.0, 0.0}, b: {1.0, 1.0}}
```
For convenience, you may omit the braces and just specify four numbers:
```
iex(2)> Collidex.Geometry.Rect.make(0.0, 0.0, 1.0, 1.0)
%Collidex.Geometry.Rect{a: {0.0, 0.0}, b: {1.0, 1.0}}
```
#### Polygons
Specify polygons as an array of vectors:
```
iex(3)> Collidex.Geometry.Polygon.make([{0.0, 0.0}, {1.0, 1.0}, {2.0, 0.0}, {1.0, -1.0}])
%Collidex.Geometry.Polygon{vertices: [{0.0, 0.0}, {1.0, 1.0}, {2.0, 0.0},
{1.0, -1.0}]}
```
### Detecting Collisions Between primitives
Pass any pair of primitives to Collidex.Detector.collision?/3. A truthy return
value indicates that they overlap on the plane. The third argument is an
optional atom representing the detection method for Polygon-to-Polygon collisions
and defaults to :accurate. For faster but less accurate comparisons, specify :fast.
### Detecting collisions between and within lists of primitives
... coming soon
"""
end