|
Aleph-w 3.0
A C++ Library for Data Structures and Algorithms
|
A regular polygon defined by center, side length, and vertex count. More...
#include <polygon.H>
Classes | |
| class | Segment_Iterator |
| Iterator over the edges (segments) of a regular polygon. More... | |
| class | Vertex_Iterator |
| Iterator over the vertices of a regular polygon. More... | |
Public Member Functions | |
| Regular_Polygon () | |
| Default constructor. | |
| Regular_Polygon (Point c, const double &side_sz, const size_t &n, const double &ang=0) | |
| Construct a regular polygon. | |
| const double & | get_side_size () const |
| Get the side length. | |
| const Point & | get_center () const |
| Get the center point. | |
| const size_t & | size () const |
| Get the number of vertices. | |
| const double & | radius () const |
| Get the circumradius. | |
| bool | is_closed () const noexcept |
| Check if the polygon is a valid closed regular polygon. | |
| Point | get_vertex (const size_t &i) const |
| Get the i-th vertex of the polygon. | |
| Point | get_first_vertex () const |
| Get the first vertex (index 0). | |
| Point | get_last_vertex () const |
| Get the last vertex (index size()-1). | |
| Segment | get_first_segment () const |
| Get the first segment (edge). | |
| Segment | get_last_segment () const |
| Get the last segment (closing edge). | |
| Point | lowest_point () const |
| Get the lowest point of the bounding circle. | |
| Point | highest_point () const |
| Get the highest point of the bounding circle. | |
| Point | leftmost_point () const |
| Get the leftmost point of the bounding circle. | |
| Point | rightmost_point () const |
| Get the rightmost point of the bounding circle. | |
Public Member Functions inherited from Aleph::Geom_Object | |
| Geom_Object ()=default | |
| virtual | ~Geom_Object ()=default |
Private Attributes | |
| Point | center_ |
| Center point of the polygon. | |
| double | side_size_ |
| Length of each side (double due to trig limitations) | |
| size_t | num_vertex_ |
| Number of vertices (sides) | |
| double | angle_ |
| Rotation angle in radians. | |
| double | r_ |
| Circumradius (distance from center to vertices) | |
| double | beta_ |
| Central angle between adjacent vertices (2π/n) | |
A regular polygon defined by center, side length, and vertex count.
Regular_Polygon represents an n-sided regular polygon (equilateral and equiangular) defined parametrically by its center point, the length of each side, and the number of vertices.
The polygon is constructed using the law of sines to calculate the circumradius from the side length:
Where:
beta = 2π/n (central angle)alpha = (π - beta)/2 (angle between radius and side)Vertices are numbered 0 to n-1. Vertex 0 is positioned at angle angle from the negative y-axis (i.e., pointing "south" when angle=0).
double internally for side length, angles, and circumradius because vertex positions require trigonometric functions (sin, cos) whose results are transcendental and cannot be exactly represented in Geom_Number (rational arithmetic). The center point remains exact; vertex coordinates are computed with floating-point precision.
|
inline |
|
inline |
Construct a regular polygon.
| c | Center point of the polygon. |
| side_sz | Length of each side. |
| n | Number of vertices (must be >= 3). |
| ang | Rotation angle in radians (default 0). |
| std::domain_error | If n is less than 3, side_sz is not positive and finite, ang is not finite, or the derived circumradius is not representable. |
Definition at line 1163 of file polygon.H.
References ah_domain_error_if, beta_, Aleph::blossom_maximum_cardinality_matching(), Aleph::PI, r_, side_size_, and sin().
|
inline |
Get the first segment (edge).
Definition at line 1242 of file polygon.H.
References get_vertex().
|
inline |
Get the first vertex (index 0).
Definition at line 1234 of file polygon.H.
References get_vertex().
|
inline |
Get the last segment (closing edge).
Definition at line 1249 of file polygon.H.
References get_vertex(), and num_vertex_.
|
inline |
Get the last vertex (index size()-1).
Definition at line 1238 of file polygon.H.
References get_vertex(), and num_vertex_.
Get the i-th vertex of the polygon.
Vertex 0 is at angle angle from the negative y-axis. Subsequent vertices are placed at equal angular intervals counter-clockwise.
| std::out_of_range | If i >= size(). |
Definition at line 1218 of file polygon.H.
References ah_out_of_range_error_if, angle_, beta_, center_, Aleph::Segment::get_tgt_point(), num_vertex_, r_, and Aleph::Segment::rotate().
Referenced by Aleph::Tikz_Plane::bbox_of(), build_poly_graph(), Aleph::Polygon::copy_regular_polygon(), Aleph::Tikz_Plane::draw_regular_polygon(), Aleph::Regular_Polygon::Segment_Iterator::get_current_segment(), Aleph::Regular_Polygon::Vertex_Iterator::get_current_vertex(), get_first_segment(), get_first_vertex(), get_last_segment(), get_last_vertex(), Aleph::put_polygon_vertices(), TEST(), TEST_F(), TEST_F(), and TEST_F().
|
inline |
|
inlinenoexcept |
Check if the polygon is a valid closed regular polygon.
Definition at line 1207 of file polygon.H.
References num_vertex_.
|
inline |
|
inline |
|
inline |
|
inline |
Get the number of vertices.
Definition at line 1196 of file polygon.H.
References num_vertex_.
Referenced by Aleph::Tikz_Plane::bbox_of(), Aleph::Polygon::copy_regular_polygon(), Aleph::Tikz_Plane::draw_regular_polygon(), Aleph::Regular_Polygon::Segment_Iterator::get_current_segment(), Aleph::Regular_Polygon::Vertex_Iterator::has_curr(), Aleph::Regular_Polygon::Segment_Iterator::has_curr(), main(), Aleph::operator<<(), Aleph::put_polygon_vertices(), TEST(), TEST_F(), TEST_F(), TEST_F(), TEST_F(), TEST_F(), and TEST_F().
|
private |
|
private |
Central angle between adjacent vertices (2π/n)
Definition at line 1141 of file polygon.H.
Referenced by Regular_Polygon(), and get_vertex().
|
private |
Center point of the polygon.
Definition at line 1136 of file polygon.H.
Referenced by get_center(), get_vertex(), highest_point(), leftmost_point(), lowest_point(), and rightmost_point().
|
private |
Number of vertices (sides)
Definition at line 1138 of file polygon.H.
Referenced by get_last_segment(), get_last_vertex(), get_vertex(), is_closed(), and size().
|
private |
Circumradius (distance from center to vertices)
Definition at line 1140 of file polygon.H.
Referenced by Regular_Polygon(), get_vertex(), highest_point(), leftmost_point(), lowest_point(), radius(), and rightmost_point().
|
private |
Length of each side (double due to trig limitations)
Definition at line 1137 of file polygon.H.
Referenced by Regular_Polygon(), and get_side_size().