45 return QgsCircle( center, radius, azimuth );
52 double yDelta_a = pt2.
y() - pt1.
y();
53 double xDelta_a = pt2.
x() - pt1.
x();
54 double yDelta_b = pt3.
y() - pt2.
y();
55 double xDelta_b = pt3.
x() - pt2.
x();
57 if ( ( std::fabs( xDelta_a ) <= epsilon ) && ( std::fabs( yDelta_b ) <= epsilon ) )
62 if ( std::fabs( yDelta_a ) <= epsilon )
66 else if ( std::fabs( yDelta_b ) <= epsilon )
70 else if ( std::fabs( xDelta_a ) <= epsilon )
74 else if ( std::fabs( xDelta_b ) <= epsilon )
87 if ( !isPerpendicular( pt1, pt2, pt3, epsilon ) )
93 else if ( !isPerpendicular( pt1, pt3, pt2, epsilon ) )
99 else if ( !isPerpendicular( pt2, pt1, pt3, epsilon ) )
105 else if ( !isPerpendicular( pt2, pt3, pt1, epsilon ) )
111 else if ( !isPerpendicular( pt3, pt2, pt1, epsilon ) )
117 else if ( !isPerpendicular( pt3, pt1, pt2, epsilon ) )
130 double yDelta_a = p2.
y() - p1.
y();
131 double xDelta_a = p2.
x() - p1.
x();
132 double yDelta_b = p3.
y() - p2.
y();
133 double xDelta_b = p3.
x() - p2.
x();
140 double aSlope = yDelta_a / xDelta_a;
141 double bSlope = yDelta_b / xDelta_b;
146 if ( ( std::fabs( xDelta_a ) <= epsilon ) && ( std::fabs( yDelta_b ) <= epsilon ) )
148 center.
setX( 0.5 * ( p2.
x() + p3.
x() ) );
149 center.
setY( 0.5 * ( p1.
y() + p2.
y() ) );
155 if ( std::fabs( aSlope - bSlope ) <= epsilon )
161 ( aSlope * bSlope * ( p1.
y() - p3.
y() ) +
162 bSlope * ( p1.
x() + p2.
x() ) -
163 aSlope * ( p2.
x() + p3.
x() ) ) /
164 ( 2.0 * ( bSlope - aSlope ) )
167 -1.0 * ( center.
x() - ( p1.
x() + p2.
x() ) / 2.0 ) /
168 aSlope + ( p1.
y() + p2.
y() ) / 2.0
178 return QgsCircle( center, diameter / 2.0, azimuth );
194 bool isIntersect =
false;
229 if ( ( l1 * l1 ) - ( l2 * l2 + l3 * l3 ) >= epsilon )
230 return QgsCircle().from2Points( pt2, pt3 );
231 else if ( ( l2 * l2 ) - ( l1 * l1 + l3 * l3 ) >= epsilon )
232 return QgsCircle().from2Points( pt3, pt1 );
233 else if ( ( l3 * l3 ) - ( l1 * l1 + l2 * l2 ) >= epsilon )
234 return QgsCircle().from2Points( pt1, pt2 );
236 return QgsCircle().from3Points( pt1, pt2, pt3, epsilon );
275 double delta_x = std::fabs( pt1.
x() - pt2.
x() );
276 double delta_y = std::fabs( pt1.
x() - pt2.
y() );
285 return QgsCircle( center, delta_x / 2.0, 0 );
312 QVector<QgsPoint> quad;
325 QVector<QgsPoint> quad;
334 quad.append( quad.at( 0 ) );
335 for ( QVector<QgsPoint>::const_iterator it = quad.constBegin(); it != quad.constEnd(); ++it )
337 points.append( *it );
339 circString->setPoints( points );
341 return circString.release();
358 rep = QStringLiteral(
"Empty" );
360 rep = QStringLiteral(
"Circle (Center: %1, Radius: %2, Azimuth: %3)" )
virtual QgsPointSequence points(unsigned int segments=36) const
Returns a list of points with segmentation from segments.
A rectangle specified with double values.
int intersections(const QgsCircle &other, QgsPoint &intersection1, QgsPoint &intersection2, bool useZ=false) const
Calculates the intersections points between this circle and an other circle.
static bool segmentIntersection(const QgsPoint &p1, const QgsPoint &p2, const QgsPoint &q1, const QgsPoint &q2, QgsPoint &intersectionPoint, bool &isIntersection, double tolerance=1e-8, bool acceptImproperIntersection=false)
Compute the intersection between two segments.
bool addZValue(double zValue=0) override
Adds a z-dimension to the geometry, initialized to a preset value.
static double lineAngle(double x1, double y1, double x2, double y2)
Calculates the direction of line joining two points in radians, clockwise from the north direction...
QgsCircularString * toCircularString(bool oriented=false) const
Returns a circular string from the circle.
A class to represent a 2D point.
bool qgsDoubleNear(double a, double b, double epsilon=4 *std::numeric_limits< double >::epsilon())
Compare two doubles (but allow some difference)
QgsWkbTypes::Type wkbType() const
Returns the WKB type of the geometry.
void setSemiMinorAxis(double semiMinorAxis) override
Inherited method.
static QgsCircle fromCenterDiameter(const QgsPoint ¢er, double diameter, double azimuth=0)
Constructs a circle by a center point and a diameter.
static int circleCircleOuterTangents(const QgsPointXY ¢er1, double radius1, const QgsPointXY ¢er2, double radius2, QgsPointXY &line1P1, QgsPointXY &line1P2, QgsPointXY &line2P1, QgsPointXY &line2P2)
Calculates the outer tangent points for two circles, centered at center1 and center2 and with radii o...
QgsCircle inscribedCircle() const
Inscribed circle of the triangle.
static QgsCircle fromExtent(const QgsPoint &pt1, const QgsPoint &pt2)
Constructs a circle by an extent (aka bounding box / QgsRectangle).
static QgsCircle from3Tangents(const QgsPoint &pt1_tg1, const QgsPoint &pt2_tg1, const QgsPoint &pt1_tg2, const QgsPoint &pt2_tg2, const QgsPoint &pt1_tg3, const QgsPoint &pt2_tg3, double epsilon=1E-8)
Constructs a circle by 3 tangents on the circle (aka inscribed circle of a triangle).
static bool setZValueFromPoints(const QgsPointSequence &points, QgsPoint &point)
A Z dimension is added to point if one of the point in the list points is in 3D.
double area() const override
The area of the ellipse.
bool tangentToPoint(const QgsPointXY &p, QgsPointXY &pt1, QgsPointXY &pt2) const
Calculates the tangent points between this circle and the point p.
virtual bool isEmpty() const
An ellipse is empty if axes are equal to 0.
bool contains(const QgsPoint &point, double epsilon=1E-8) const
Returns true if the circle contains the point.
static QgsPoint midpoint(const QgsPoint &pt1, const QgsPoint &pt2)
Returns a middle point between points pt1 and pt2.
QString qgsDoubleToString(double a, int precision=17)
Returns a string representation of a double.
QString asWkt(int precision=17) const override
Returns a WKT representation of the geometry.
void setSemiMajorAxis(double semiMajorAxis) override
Inherited method.
double azimuth() const
Returns the azimuth.
Point geometry type, with support for z-dimension and m-values.
virtual QVector< QgsPoint > quadrant() const
The four quadrants of the ellipse.
void setX(double x)
Sets the point's x-coordinate.
double semiMajorAxis() const
Returns the semi-major axis.
double distance(double x, double y) const
Returns the distance between this point and a specified x, y coordinate.
void setY(double y)
Sets the point's y-coordinate.
QVector< QgsPoint > QgsPointSequence
double perimeter() const override
The circumference of the ellipse using first approximation of Ramanujan.
static Type dropZ(Type type)
Drops the z dimension (if present) for a WKB type and returns the new type.
static QgsCircle from3Points(const QgsPoint &pt1, const QgsPoint &pt2, const QgsPoint &pt3, double epsilon=1E-8)
Constructs a circle by 3 points on the circle.
static QgsCircle minimalCircleFrom3Points(const QgsPoint &pt1, const QgsPoint &pt2, const QgsPoint &pt3, double epsilon=1E-8)
Constructs the smallest circle from 3 points.
static bool tangentPointAndCircle(const QgsPointXY ¢er, double radius, const QgsPointXY &p, QgsPointXY &pt1, QgsPointXY &pt2)
Calculates the tangent points between the circle with the specified center and radius and the point p...
bool is3D() const
Returns true if the geometry is 3D and contains a z-value.
bool convertTo(QgsWkbTypes::Type type) override
Converts the geometry to a specified type.
static int circleCircleIntersections(QgsPointXY center1, double radius1, QgsPointXY center2, double radius2, QgsPointXY &intersection1, QgsPointXY &intersection2)
Calculates the intersections points between the circle with center center1 and radius radius1 and the...
Circular string geometry type.
static QgsCircle from2Points(const QgsPoint &pt1, const QgsPoint &pt2)
Constructs a circle by 2 points on the circle.
QgsRectangle boundingBox() const override
Returns the minimal bounding box for the ellipse.
int outerTangents(const QgsCircle &other, QgsPointXY &line1P1, QgsPointXY &line1P2, QgsPointXY &line2P1, QgsPointXY &line2P2) const
Calculates the outer tangent points between this circle and an other circle.
double radius() const
Returns the radius of the circle.
QgsPoint center() const
Returns the center point.
QVector< QgsPoint > northQuadrant() const
The four quadrants of the ellipse.
QString toString(int pointPrecision=17, int radiusPrecision=17, int azimuthPrecision=2) const override
returns a string representation of the ellipse.
double semiMinorAxis() const
Returns the semi-minor axis.
static QgsCircle fromCenterPoint(const QgsPoint ¢er, const QgsPoint &pt1)
Constructs a circle by a center point and another point.