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. Creates an invalid empty polygon.
 
 Regular_Polygon (Point c, const double &side_sz, const size_t &n, const double &ang=0)
 Construct a regular polygon.
 
const doubleget_side_size () const
 Get the side length.
 
const Pointget_center () const
 Get the center point.
 
const size_t & size () const
 Get the number of vertices.
 
const doubleradius () const
 Get the circumradius.
 
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
 

Static Public Member Functions

static bool is_closed ()
 Check if the polygon is closed.
 

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)

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:229
A regular polygon defined by center, side length, and vertex count.
Definition polygon.H:1132
Divide_Conquer_DP_Result< Cost > divide_and_conquer_partition_dp(const size_t groups, const size_t n, Transition_Cost_Fn transition_cost, const Cost inf=dp_optimization_detail::default_inf< Cost >())
Optimize partition DP using divide-and-conquer optimization.
constexpr double PI
Definition point.H:132
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 1131 of file polygon.H.

Constructor & Destructor Documentation

◆ Regular_Polygon() [1/2]

Aleph::Regular_Polygon::Regular_Polygon ( )
inline

Default constructor. Creates an invalid empty polygon.

Definition at line 1142 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 < 3.

Definition at line 1154 of file polygon.H.

References ah_domain_error_if, beta_, 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 1174 of file polygon.H.

References center_.

Referenced by Aleph::operator<<(), 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 1221 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 1213 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 vertex 0 to last vertex.

Definition at line 1228 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 1217 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 1170 of file polygon.H.

References side_size_.

Referenced by 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 1197 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 1364 of file polygon.H.

References center_, and r_.

◆ is_closed()

static bool Aleph::Regular_Polygon::is_closed ( )
inlinestatic

Check if the polygon is closed.

Returns
Always true for regular polygons.

Definition at line 1186 of file polygon.H.

Referenced by 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 1368 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 1360 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 1182 of file polygon.H.

References r_.

Referenced by Aleph::operator<<(), TEST(), 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 1372 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 1136 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 1138 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 1133 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 1135 of file polygon.H.

Referenced by get_last_segment(), get_last_vertex(), get_vertex(), and size().

◆ r_

double Aleph::Regular_Polygon::r_
private

Circumradius (distance from center to vertices)

Definition at line 1137 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 1134 of file polygon.H.

Referenced by Regular_Polygon(), and get_side_size().


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