collision v0.3.1 Collision.Polygon.RegularPolygon
A regular polygon is equiangular and equilateral — all angles and all sides be equal. With enough sides, a regular polygon tends toward a circle.
Summary
Types
A regular polygon is defined by a number of sides, a circumradius,
a rotation angle, and a center point {x, y}
Functions
Determine the vertices, or points, of the polygon
Construct a regular polygon from a tuple
Rotate a regular polygon, rotation angle should be radians
Rotate a regular polygon using rotation angle in degrees
Rounds the x and y components of an {x, y} tuple
Translate a polygon in cartesian space
Translate a polygon’s vertices
Types
t :: Collision.Polygon.RegularPolygon.t
A regular polygon is defined by a number of sides, a circumradius,
a rotation angle, and a center point {x, y}
.
Functions
Determine the vertices, or points, of the polygon.
Examples
iex> Collision.Polygon.RegularPolygon.calculate_vertices(
...> %Collision.Polygon.RegularPolygon{
...> n_sides: 4, radius: 2, rotation_angle: 0, midpoint: %{x: 2, y: 0}
...> })
[{4.0, 0.0}, {2.0, 2.0}, {0.0, 0.0}, {2.0, -2.0}]
Specs
from_tuple({integer, number, number, {number, number}}, atom) :: Collision.Polygon.RegularPolygon.t
Construct a regular polygon from a tuple.
A polygon must have at least three sides.
Examples
iex> Collision.Polygon.RegularPolygon.from_tuple({3, 2, 0, {0, 0}})
{:ok, %Collision.Polygon.RegularPolygon{n_sides: 3, radius: 2,
rotation_angle: 0.0, midpoint: %Collision.Polygon.Vertex{x: 0, y: 0}}}
Specs
rotate_polygon([Collision.Polygon.Vertex.t], radians, %{x: number, y: number}) :: [Collision.Polygon.Vertex.t]
Rotate a regular polygon, rotation angle should be radians.
Examples
iex(1)> p = Collision.two_dimensional_polygon(4, 3, 0, {0,0})
%Collision.Polygon.RegularPolygon{midpoint: %Collision.Polygon.Vertex{x: 0,
y: 0}, n_sides: 4, radius: 3, rotation_angle: 0.0}
iex(2)> v = Collision.Polygon.RegularPolygon.calculate_vertices(p)
iex(3)> Collision.Polygon.RegularPolygon.rotate_polygon(v, 3.14)
[{-3.0, 0.0}, {0.0, -3.0}, {3.0, 0.0}, {0.0, 3.0}]
Specs
rotate_polygon_degrees([Collision.Polygon.Vertex.t] | Collision.Polygon.RegularPolygon.t, degrees) :: [Collision.Polygon.Vertex.t]
Rotate a regular polygon using rotation angle in degrees.
Examples
iex(1)> p = Collision.two_dimensional_polygon(4, 3, 0, {0,0})
%Collision.Polygon.RegularPolygon{midpoint: %Collision.Polygon.Vertex{x: 0,
y: 0}, n_sides: 4, radius: 3, rotation_angle: 0.0}
iex(2)> vertices = Collision.Polygon.RegularPolygon.calculate_vertices(p)
[{3.0, 0.0}, {0.0, 3.0}, {-3.0, 0.0}, {0.0, -3.0}]
iex(3)> Collision.Polygon.RegularPolygon.rotate_polygon_degrees(vertices, 180)
[{-3.0, 0.0}, {0.0, -3.0}, {3.0, 0.0}, {0.0, 3.0}]
iex(4)> Collision.Polygon.RegularPolygon.rotate_polygon_degrees(vertices, 360)
[{3.0, 0.0}, {0.0, 3.0}, {-3.0, 0.0}, {0.0, -3.0}]
Specs
round_vertices([{number, number}]) :: [{number, number}]
Rounds the x and y components of an {x, y} tuple.
Examples
iex> Collision.Polygon.RegularPolygon.round_vertices([{1.55555555, 1.2222222}])
[{1.55556, 1.22222}]
Specs
Translate a polygon in cartesian space.
Translate a polygon’s vertices.
Examples
iex(1)> p = Collision.two_dimensional_polygon(4, 3, 0, {0,0})
%Collision.Polygon.RegularPolygon{midpoint: %Collision.Polygon.Vertex{x: 0, y: 0},
n_sides: 4, radius: 3, rotation_angle: 0.0}
iex(2)> Collision.Polygon.RegularPolygon.translate_polygon(p, %{x: -2, y: 2})
%Collision.Polygon.RegularPolygon{midpoint: %Collision.Polygon.Vertex{x: -2, y: 2},
n_sides: 4, radius: 3, rotation_angle: 0.0}