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 );
 
   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  std::unique_ptr<QgsPolygon> polygon( 
new QgsPolygon() );
 
  188    return polygon.release();
 
  193  return polygon.release();
 
  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) SIP_HOLDGIL
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 distance(double x, double y) const SIP_HOLDGIL
Returns the Cartesian 2D distance between this point and a specified x, y coordinate.
 
bool isEmpty() const override SIP_HOLDGIL
Returns true if the geometry is empty.
 
QgsPoint project(double distance, double azimuth, double inclination=90.0) const SIP_HOLDGIL
Returns a new point which corresponds to this point projected by a specified distance with specified ...
 
QString asWkt(int precision=17) const override
Returns a WKT representation of the geometry.
 
double azimuth(const QgsPoint &other) const SIP_HOLDGIL
Calculates Cartesian azimuth between this point and other one (clockwise in degree,...
 
Regular Polygon geometry type.
 
QgsPointSequence points() const
Returns a list including the vertices of the regular polygon.
 
double radius() const SIP_HOLDGIL
Returns the radius.
 
QString toString(int pointPrecision=17, int radiusPrecision=17, int anglePrecision=2) const
Returns a string representation of the regular polygon.
 
QgsPoint firstVertex() const SIP_HOLDGIL
Returns the first vertex (corner) of the regular polygon.
 
double length() const SIP_HOLDGIL
Returns the length of a side.
 
void setCenter(const QgsPoint ¢er) SIP_HOLDGIL
Sets the center point.
 
QgsLineString * toLineString() const
Returns as a linestring.
 
double interiorAngle() const SIP_HOLDGIL
Returns the measure of the interior angles in degrees.
 
bool isEmpty() const SIP_HOLDGIL
A regular polygon is empty if radius equal to 0 or number of sides < 3.
 
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 perimeter() const SIP_HOLDGIL
Returns the perimeter.
 
QgsCircle circumscribedCircle() const SIP_HOLDGIL
Returns the circumscribed circle.
 
bool operator==(const QgsRegularPolygon &rp) const SIP_HOLDGIL
 
QgsPoint center() const SIP_HOLDGIL
Returns the center point of the regular polygon.
 
QgsTriangle toTriangle() const
Returns as a triangle.
 
void setNumberSides(unsigned int numberSides) SIP_HOLDGIL
Sets the number of sides.
 
QgsCircle inscribedCircle() const SIP_HOLDGIL
Returns the inscribed circle.
 
QgsPolygon * toPolygon() const
Returns as a polygon.
 
void setRadius(double radius) SIP_HOLDGIL
Sets the radius.
 
void setFirstVertex(const QgsPoint &firstVertex) SIP_HOLDGIL
Sets the first vertex.
 
double apothem() const SIP_HOLDGIL
Returns the apothem of the regular polygon.
 
QgsRegularPolygon() SIP_HOLDGIL=default
Constructor for QgsRegularPolygon.
 
double centralAngle() const SIP_HOLDGIL
Returns the measure of the central angle (the angle subtended at the center of the polygon by one of ...
 
QVector< QgsTriangle > triangulate() const
Returns a triangulation (vertices from sides to the center) of the regular polygon.
 
bool operator!=(const QgsRegularPolygon &rp) const SIP_HOLDGIL
 
double area() const SIP_HOLDGIL
Returns the area.
 
double ANALYSIS_EXPORT angle(QgsPoint *p1, QgsPoint *p2, QgsPoint *p3, QgsPoint *p4)
Calculates the angle between two segments (in 2 dimension, z-values are ignored)
 
QString qgsDoubleToString(double a, int precision=17)
Returns a string representation of a double.
 
QVector< QgsPoint > QgsPointSequence