304 mSemiMajorAxis = std::fabs( radius );
314 QVector<QgsPoint> northQuadrant() const
SIP_FACTORY;
323 bool contains( const
QgsPoint &point,
double epsilon = 1E-8 ) const;
327 QString toString(
int pointPrecision = 17,
int radiusPrecision = 17,
int azimuthPrecision = 2 ) const override;
375 static
int calculateSegments(
double radius,
double parameter,
int minSegments,
Qgis::SegmentCalculationMethod method );
379 SIP_PYOBJECT __repr__();
382 = QStringLiteral(
"<QgsCircle: %1>" ).arg( sipCpp->toString() );
383 sipRes = PyUnicode_FromString( str.toUtf8().constData() );
415 static int calculateSegmentsStandard(
double radius,
double tolerance,
int minSegments )
417 if ( tolerance >= radius )
423 const double halfAngle = std::acos( 1.0 - tolerance / radius );
424 const int segments = std::ceil( M_PI / halfAngle );
426 return std::max( segments, minSegments );
462 static int calculateSegmentsAdaptive(
double radius,
double tolerance,
int minSegments )
465 const double adaptiveTolerance = tolerance * std::sqrt( radius ) / std::log10( radius + 1.0 );
467 if ( adaptiveTolerance >= radius )
472 const double halfAngle = std::acos( 1.0 - adaptiveTolerance / radius );
473 const int segments = std::ceil( M_PI / halfAngle );
475 return std::max( segments, minSegments );
519 static int calculateSegmentsByAreaError(
double radius,
double baseTolerance,
int minSegments )
523 const double decimalTolerance = baseTolerance / 100.0;
526 const double tolerance = std::max( decimalTolerance, 1.0e-8 );
529 const double requiredSegments = M_PI * std::sqrt( 2.0 / ( 3.0 * tolerance ) );
531 return std::max(
static_cast<int>( std::ceil( requiredSegments ) ), minSegments );
554 static int calculateSegmentsByConstant(
double radius,
double constant,
int minSegments )
556 return std::max( minSegments,
static_cast<int>( std::ceil( constant * radius ) ) );