Aleph-w 3.0
A C++ Library for Data Structures and Algorithms
Loading...
Searching...
No Matches
Aleph::Regular_Polygon Class Reference

A regular polygon defined by center, side length, and vertex count. More...

#include <polygon.H>

Inheritance diagram for Aleph::Regular_Polygon:
[legend]
Collaboration diagram for Aleph::Regular_Polygon:
[legend]

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)
 

Detailed Description

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.

Construction

The polygon is constructed using the law of sines to calculate the circumradius from the side length:

r = side_size * sin(alpha) / sin(beta)
__gmp_expr< T, __gmp_unary_expr< __gmp_expr< T, U >, __gmp_sin_function > > sin(const __gmp_expr< T, U > &expr)
Definition gmpfrxx.h:4081
size_t blossom_maximum_cardinality_matching(const GT &g, DynDlist< typename GT::Arc * > &matching, SA sa=SA())
Alias of compute_maximum_cardinality_general_matching().
Definition Blossom.H:466
gsl_rng * r

Where:

  • beta = 2π/n (central angle)
  • alpha = (π - beta)/2 (angle between radius and side)

Vertex Numbering

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).

Example

// Create a regular hexagon centered at (100, 100) with side length 50
Regular_Polygon hexagon(Point(100, 100), 50.0, 6);
// Iterate over vertices
for (size_t i = 0; i < hexagon.size(); ++i)
std::cout << hexagon.get_vertex(i).to_string() << "\n";
// Create rotated square (45 degrees = PI/4 radians)
Regular_Polygon diamond(Point(0, 0), 100.0, 4, PI/4);
Represents a point with rectangular coordinates in a 2D plane.
Definition point.H:221
A regular polygon defined by center, side length, and vertex count.
Definition polygon.H:1135
constexpr double PI
Definition point.H:129
Note
This class uses 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.
See also
Polygon

Definition at line 1134 of file polygon.H.

Constructor & Destructor Documentation

◆ Regular_Polygon() [1/2]

Aleph::Regular_Polygon::Regular_Polygon ( )
inline

Default constructor.

Creates a completely initialized empty polygon at the origin.

Definition at line 1148 of file polygon.H.

◆ Regular_Polygon() [2/2]

Aleph::Regular_Polygon::Regular_Polygon ( Point  c,
const double &  side_sz,
const size_t &  n,
const double &  ang = 0 
)
inline

Construct a regular polygon.

Parameters
cCenter point of the polygon.
side_szLength of each side.
nNumber of vertices (must be >= 3).
angRotation angle in radians (default 0).
Exceptions
std::domain_errorIf 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().

Member Function Documentation

◆ get_center()

const Point & Aleph::Regular_Polygon::get_center ( ) const
inline

Get the center point.

Returns
Reference to the center point.

Definition at line 1192 of file polygon.H.

References center_.

Referenced by Aleph::operator<<(), TEST_F(), and TEST_F().

◆ get_first_segment()

Segment Aleph::Regular_Polygon::get_first_segment ( ) const
inline

Get the first segment (edge).

Returns
Segment from vertex 0 to vertex 1.

Definition at line 1242 of file polygon.H.

References get_vertex().

◆ get_first_vertex()

Point Aleph::Regular_Polygon::get_first_vertex ( ) const
inline

Get the first vertex (index 0).

Returns
The first vertex point.

Definition at line 1234 of file polygon.H.

References get_vertex().

◆ get_last_segment()

Segment Aleph::Regular_Polygon::get_last_segment ( ) const
inline

Get the last segment (closing edge).

Returns
Segment from the last vertex to vertex 0.

Definition at line 1249 of file polygon.H.

References get_vertex(), and num_vertex_.

◆ get_last_vertex()

Point Aleph::Regular_Polygon::get_last_vertex ( ) const
inline

Get the last vertex (index size()-1).

Returns
The last vertex point.

Definition at line 1238 of file polygon.H.

References get_vertex(), and num_vertex_.

◆ get_side_size()

const double & Aleph::Regular_Polygon::get_side_size ( ) const
inline

Get the side length.

Returns
Length of each side.

Definition at line 1188 of file polygon.H.

References side_size_.

Referenced by main(), TEST_F(), TEST_F(), and TEST_F().

◆ get_vertex()

Point Aleph::Regular_Polygon::get_vertex ( const size_t &  i) const
inline

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.

Parameters
iVertex index (0 to size()-1).
Returns
The vertex point.
Exceptions
std::out_of_rangeIf 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().

◆ highest_point()

Point Aleph::Regular_Polygon::highest_point ( ) const
inline

Get the highest point of the bounding circle.

Returns
Point at the top of the circumscribed circle.

Definition at line 1385 of file polygon.H.

References center_, and r_.

◆ is_closed()

bool Aleph::Regular_Polygon::is_closed ( ) const
inlinenoexcept

Check if the polygon is a valid closed regular polygon.

Returns
True for constructed polygons and false for the default empty state.
Note
This is an instance query because closure depends on whether the object represents a constructed polygon or the default empty state.

Definition at line 1207 of file polygon.H.

References num_vertex_.

Referenced by main(), TEST_F(), and TEST_F().

◆ leftmost_point()

Point Aleph::Regular_Polygon::leftmost_point ( ) const
inline

Get the leftmost point of the bounding circle.

Returns
Point at the left of the circumscribed circle.

Definition at line 1389 of file polygon.H.

References center_, and r_.

◆ lowest_point()

Point Aleph::Regular_Polygon::lowest_point ( ) const
inline

Get the lowest point of the bounding circle.

Returns
Point at the bottom of the circumscribed circle.
Note
For simplicity, returns cardinal points of the circumcircle, not the actual extreme vertices.

Definition at line 1381 of file polygon.H.

References center_, and r_.

◆ radius()

const double & Aleph::Regular_Polygon::radius ( ) const
inline

Get the circumradius.

Returns
Distance from center to each vertex.

Definition at line 1200 of file polygon.H.

References r_.

Referenced by main(), Aleph::operator<<(), TEST(), TEST_F(), TEST_F(), and TEST_F().

◆ rightmost_point()

Point Aleph::Regular_Polygon::rightmost_point ( ) const
inline

Get the rightmost point of the bounding circle.

Returns
Point at the right of the circumscribed circle.

Definition at line 1393 of file polygon.H.

References center_, and r_.

◆ size()

Member Data Documentation

◆ angle_

double Aleph::Regular_Polygon::angle_
private

Rotation angle in radians.

Definition at line 1139 of file polygon.H.

Referenced by get_vertex().

◆ beta_

double Aleph::Regular_Polygon::beta_
private

Central angle between adjacent vertices (2π/n)

Definition at line 1141 of file polygon.H.

Referenced by Regular_Polygon(), and get_vertex().

◆ center_

Point Aleph::Regular_Polygon::center_
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().

◆ num_vertex_

size_t Aleph::Regular_Polygon::num_vertex_
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().

◆ r_

double Aleph::Regular_Polygon::r_
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().

◆ side_size_

double Aleph::Regular_Polygon::side_size_
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().


The documentation for this class was generated from the following file: