26 void QgsEllipse::normalizeAxis()
49 double dist_p1p2 = pt1.
distance( pt2 );
50 double dist_p1p3 = pt1.
distance( pt3 );
51 double dist_p2p3 = pt2.
distance( pt3 );
53 double dist = dist_p1p3 + dist_p2p3;
57 double axis_a = dist / 2.0;
58 double axis_b = std::sqrt( std::pow( axis_a, 2.0 ) - std::pow( dist_p1p2 / 2.0, 2.0 ) );
62 return QgsEllipse( center, axis_a, axis_b, azimuth );
68 double axis_a = std::fabs( pt2.
x() - pt1.
x() ) / 2.0;
69 double axis_b = std::fabs( pt2.
y() - pt1.
y() ) / 2.0;
74 return QgsEllipse( center, axis_a, axis_b, azimuth );
79 double axis_a = std::fabs( pt1.
x() - center.
x() );
80 double axis_b = std::fabs( pt1.
y() - center.
y() );
86 return QgsEllipse( centerPt, axis_a, axis_b, azimuth );
92 double axis_a = center.
distance( pt1 );
96 double axis_b = center.
distance( pp );
101 return QgsEllipse( centerPt, axis_a, axis_b, azimuth );
160 return std::numeric_limits<double>::quiet_NaN();
174 return M_PI * ( 3 * ( a + b ) - std::sqrt( 10 * a * b + 3 * ( a * a + b * b ) ) );
179 QVector<QgsPoint> quad;
204 for (
unsigned int i = 0; i < segments; ++i )
206 t.append( 2 * M_PI - ( ( 2 * M_PI ) / segments * i ) );
209 for ( QVector<double>::const_iterator it = t.constBegin(); it != t.constEnd(); ++it )
217 pts.push_back(
QgsPoint( pType, x, y, z, m ) );
225 std::unique_ptr<QgsPolygon> polygon(
new QgsPolygon() );
228 return polygon.release();
233 return polygon.release();
241 return ext.release();
246 pts.append( pts.at( 0 ) );
248 ext->setPoints( pts );
250 return ext.release();
267 double halfHeight = std::sqrt( ux * ux + uy * uy );
268 double halfWidth = std::sqrt( vx * vx + vy * vy );
280 rep = QStringLiteral(
"Empty" );
282 rep = QStringLiteral(
"Ellipse (Center: %1, Semi-Major Axis: %2, Semi-Minor Axis: %3, Azimuth: %4)" )
293 std::unique_ptr<QgsPolygon> ombb(
new QgsPolygon() );
296 return ombb.release();
309 ombb->setExteriorRing( ext );
311 return ombb.release();
virtual bool operator!=(const QgsEllipse &elp) const
A rectangle specified with double values.
static QgsEllipse fromCenterPoint(const QgsPoint &ptc, const QgsPoint &pt1)
Constructs an ellipse by a center point and a another point.
void setPoints(const QgsPointSequence &points)
Resets the line string to match the specified list of points.
QgsEllipse()=default
Constructor for QgsEllipse.
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...
virtual void setSemiMajorAxis(const double semiMajorAxis)
Sets the semi-major axis.
double distance(double x, double y) const
Returns the distance between this point and a specified x, y coordinate.
A class to represent a 2D point.
QgsPoint center() const
Returns the center point.
bool qgsDoubleNear(double a, double b, double epsilon=4 *DBL_EPSILON)
Compare two doubles (but allow some difference)
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)
virtual bool operator==(const QgsEllipse &elp) const
void setAzimuth(const double azimuth)
Sets the azimuth (orientation).
Type
The WKB type describes the number of dimensions a geometry has.
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 azimuth() const
Returns the azimuth.
static QgsEllipse fromExtent(const QgsPoint &pt1, const QgsPoint &pt2)
Constructs an ellipse by an extent (aka bounding box / QgsRectangle).
static QgsEllipse fromFoci(const QgsPoint &pt1, const QgsPoint &pt2, const QgsPoint &pt3)
Constructs an ellipse by foci (pt1 and pt2) and a point pt3.
static QgsPoint midpoint(const QgsPoint &pt1, const QgsPoint &pt2)
Returns a middle point between points pt1 and pt2.
virtual QgsPolygon * toPolygon(unsigned int segments=36) const
Returns a segmented polygon.
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.
static double normalizedAngle(double angle)
Ensures that an angle is in the range 0 <= angle < 2 pi.
QgsWkbTypes::Type wkbType() const
Returns the WKB type of the geometry.
QgsPoint project(double distance, double azimuth, double inclination=90.0) const
Returns a new point which correspond to this point projected by a specified distance with specified a...
Point geometry type, with support for z-dimension and m-values.
static QgsEllipse fromCenter2Points(const QgsPoint &ptc, const QgsPoint &pt1, const QgsPoint &pt2)
Constructs an ellipse by a central point and two other points.
virtual QVector< QgsPoint > foci() const
Two foci of the ellipse.
QVector< QgsPoint > QgsPointSequence
virtual QString toString(int pointPrecision=17, int axisPrecision=17, int azimuthPrecision=2) const
returns a string representation of the ellipse.
virtual bool isEmpty() const
An ellipse is empty if axes are equal to 0.
virtual double area() const
The area of the ellipse.
Line string geometry type, with support for z-dimension and m-values.
static QgsPoint projectPointOnSegment(const QgsPoint &p, const QgsPoint &s1, const QgsPoint &s2)
Project the point on a segment.
virtual QgsLineString * toLineString(unsigned int segments=36) const
Returns a segmented linestring.
virtual double focusDistance() const
The distance between the center and each foci.
virtual QVector< QgsPoint > quadrant() const
The four quadrants of the ellipse.
virtual QgsRectangle boundingBox() const
Returns the minimal bounding box for the ellipse.
virtual QgsPolygon * orientedBoundingBox() const
Returns the oriented minimal bounding box for the ellipse.
virtual double perimeter() const
The circumference of the ellipse using first approximation of Ramanujan.
virtual void setSemiMinorAxis(const double semiMinorAxis)
Sets the semi-minor axis.
virtual double eccentricity() const
The eccentricity of the ellipse.
virtual QgsPointSequence points(unsigned int segments=36) const
Returns a list of points with segmentation from segments.