30    mNumberSides = numSides;
 
   36        mRadius = std::fabs( 
radius );
 
   37        mFirstVertex = mCenter.
project( mRadius, azimuth );
 
   42        mRadius = apothemToRadius( std::fabs( 
radius ), numSides );
 
 
   57    mNumberSides = numSides;
 
 
   85    mNumberSides = numSides;
 
   87    const double azimuth = pt1.
azimuth( pt2 );
 
   91    const double angle = ( 180 - ( 360 / numSides ) ) / 2.0;
 
   92    const double hypothenuse = 
length / std::cos( angle * M_PI / 180 );
 
   95    mCenter = pt1.
project( hypothenuse, azimuth + angle );
 
   97    mRadius = std::fabs( hypothenuse );
 
 
  103  return ( ( mCenter == rp.mCenter ) &&
 
  104           ( mFirstVertex == rp.mFirstVertex ) &&
 
  105           ( mNumberSides == rp.mNumberSides )
 
 
  116  return ( ( mNumberSides < 3 ) ||
 
  119           ( mCenter == mFirstVertex )
 
 
  125  const double azimuth = mFirstVertex.
isEmpty() ? 0 : mCenter.
azimuth( mFirstVertex );
 
 
  133  mRadius = std::fabs( 
radius );
 
  134  const double azimuth = mFirstVertex.
isEmpty() ? 0 : mCenter.
azimuth( mFirstVertex );
 
  136  mFirstVertex = mCenter.
project( mRadius, azimuth );
 
 
  141  const double azimuth = mCenter.
azimuth( mFirstVertex );
 
  144  mCenter = mFirstVertex.
project( mRadius, azimuth );
 
 
  151    mNumberSides = numSides;
 
 
  163  double azimuth = mCenter.
azimuth( mFirstVertex );
 
  168  while ( n <= mNumberSides )
 
  170    pts.push_back( mCenter.
project( mRadius, azimuth ) );
 
  171    azimuth += azimuth_add;
 
  172    if ( ( azimuth_add > 0 ) && ( azimuth > 180.0 ) )
 
 
  185  auto polygon = std::make_unique<QgsPolygon>();
 
  188    return polygon.release();
 
  193  return polygon.release();
 
 
  198  auto ext = std::make_unique<QgsLineString>();
 
  201    return ext.release();
 
  207  ext->setPoints( pts );
 
  208  ext->addVertex( pts.at( 0 ) ); 
 
  210  return ext.release();
 
 
  215  if ( 
isEmpty() || ( mNumberSides != 3 ) )
 
  223  return QgsTriangle( pts.at( 0 ), pts.at( 1 ), pts.at( 2 ) );
 
 
  228  QVector<QgsTriangle> l_tri;
 
  238  while ( n < mNumberSides - 1 )
 
  240    l_tri.append( 
QgsTriangle( pts.at( n ), pts.at( n + 1 ), mCenter ) );
 
  243  l_tri.append( 
QgsTriangle( pts.at( n ), pts.at( 0 ), mCenter ) );
 
 
  264    rep = QStringLiteral( 
"Empty" );
 
  266    rep = QStringLiteral( 
"RegularPolygon (Center: %1, First Vertex: %2, Radius: %3, Azimuth: %4)" )
 
  267          .arg( mCenter.
asWkt( pointPrecision ), 0, 
's' )
 
  268          .arg( mFirstVertex.
asWkt( pointPrecision ), 0, 
's' )
 
 
  284  return ( mRadius * mRadius * mNumberSides * std::sin( 
centralAngle() * M_PI / 180.0 ) ) / 2;
 
 
  294  return length() * mNumberSides;
 
 
  304  return mRadius * 2 * std::sin( M_PI / mNumberSides );
 
 
  307double QgsRegularPolygon::apothemToRadius( 
const double apothem, 
const unsigned int numSides )
 const 
  309  return apothem / std::cos( M_PI / numSides );
 
  314  return ( nbSides - 2 ) * 180 / nbSides;
 
  319  return 360.0 / nbSides;
 
static QgsPoint midpoint(const QgsPoint &pt1, const QgsPoint &pt2)
Returns a middle point between points pt1 and pt2.
 
Line string geometry type, with support for z-dimension and m-values.
 
Point geometry type, with support for z-dimension and m-values.
 
double azimuth(const QgsPoint &other) const
Calculates Cartesian azimuth between this point and other one (clockwise in degree,...
 
QString asWkt(int precision=17) const override
Returns a WKT representation of the geometry.
 
bool isEmpty() const override
Returns true if the geometry is empty.
 
double distance(double x, double y) const
Returns the Cartesian 2D distance between this point and a specified x, y coordinate.
 
QgsPoint project(double distance, double azimuth, double inclination=90.0) const
Returns a new point which corresponds to this point projected by a specified distance with specified ...
 
Regular Polygon geometry type.
 
QgsPointSequence points() const
Returns a list including the vertices of the regular polygon.
 
QString toString(int pointPrecision=17, int radiusPrecision=17, int anglePrecision=2) const
Returns a string representation of the regular polygon.
 
QgsRegularPolygon()=default
Constructor for QgsRegularPolygon.
 
double interiorAngle() const
Returns the measure of the interior angles in degrees.
 
QgsPoint center() const
Returns the center point of the regular polygon.
 
QgsCircle circumscribedCircle() const
Returns the circumscribed circle.
 
QgsPoint firstVertex() const
Returns the first vertex (corner) of the regular polygon.
 
QgsLineString * toLineString() const
Returns as a linestring.
 
ConstructionOption
A regular polygon can be constructed inscribed in a circle or circumscribed about a circle.
 
@ CircumscribedCircle
Circumscribed about a circle (the radius is the distance from the center to the midpoints of the side...
 
@ InscribedCircle
Inscribed in a circle (the radius is the distance between the center and vertices)
 
double length() const
Returns the length of a side.
 
double perimeter() const
Returns the perimeter.
 
QgsTriangle toTriangle() const
Returns as a triangle.
 
double radius() const
Returns the radius.
 
void setNumberSides(unsigned int numberSides)
Sets the number of sides.
 
void setCenter(const QgsPoint ¢er)
Sets the center point.
 
QgsPolygon * toPolygon() const
Returns as a polygon.
 
bool operator==(const QgsRegularPolygon &rp) const
 
bool operator!=(const QgsRegularPolygon &rp) const
 
double area() const
Returns the area.
 
bool isEmpty() const
A regular polygon is empty if radius equal to 0 or number of sides < 3.
 
double apothem() const
Returns the apothem of the regular polygon.
 
void setRadius(double radius)
Sets the radius.
 
QVector< QgsTriangle > triangulate() const
Returns a triangulation (vertices from sides to the center) of the regular polygon.
 
double centralAngle() const
Returns the measure of the central angle (the angle subtended at the center of the polygon by one of ...
 
void setFirstVertex(const QgsPoint &firstVertex)
Sets the first vertex.
 
QgsCircle inscribedCircle() const
Returns the inscribed circle.
 
QString qgsDoubleToString(double a, int precision=17)
Returns a string representation of a double.
 
QVector< QgsPoint > QgsPointSequence