GEOS  3.14.0dev
Public Types | Public Member Functions | Public Attributes | List of all members
geos::geom::CircularArc Class Reference

#include <CircularArc.h>

Public Types

using CoordinateXY = geom::CoordinateXY
 

Public Member Functions

 CircularArc (const CoordinateXY &q0, const CoordinateXY &q1, const CoordinateXY &q2)
 
int orientation () const
 
const CoordinateXY & getCenter () const
 Return the center point of the circle associated with this arc.
 
double getRadius () const
 Return the radius of the circle associated with this arc.
 
bool isCircle () const
 Return whether this arc forms a complete circle.
 
bool isLinear () const
 Returns whether this arc forms a straight line (p0, p1, and p2 are collinear)
 
double getAngle () const
 Return the inner angle of the sector associated with this arc. More...
 
double getLength () const
 Return the length of the arc.
 
double getArea () const
 Return the area enclosed by the arc p0-p1-p2 and the line segment p2-p0.
 
double theta0 () const
 Return the angle of p0.
 
double theta2 () const
 Return the angle of p2.
 
bool containsPointOnCircle (const CoordinateXY &q) const
 
bool containsPoint (const CoordinateXY &q)
 
bool containsAngle (double theta) const
 Check to see if a given angle lies on this arc.
 
bool isUpwardAtPoint (const CoordinateXY &q) const
 
Iterator begin () const
 
Iterator end () const
 

Public Attributes

const CoordinateXY & p0
 
const CoordinateXY & p1
 
const CoordinateXY & p2
 

Detailed Description

A CircularArc is a reference to three points that define a circular arc. It provides for the lazy calculation of various arc properties such as the center, radius, and orientation

Member Function Documentation

◆ containsPoint()

bool geos::geom::CircularArc::containsPoint ( const CoordinateXY &  q)
inline

Check to see if a coordinate lies on the arc, after testing whether it lies on the circle.

References geos::geom::BOUNDARY, and geos::triangulate::quadedge::TrianglePredicate::isInCircleNormalized().

◆ containsPointOnCircle()

bool geos::geom::CircularArc::containsPointOnCircle ( const CoordinateXY &  q) const
inline

Check to see if a coordinate lies on the arc Only the angle is checked, so it is assumed that the point lies on the circle of which this arc is a part.

◆ getAngle()

double geos::geom::CircularArc::getAngle ( ) const
inline

Return the inner angle of the sector associated with this arc.

Even Rouault: potential optimization?: using crossproduct(p0 - center, p2 - center) = radius * radius * sin(angle) could yield the result by just doing a single asin(), instead of 2 atan2() actually one should also likely compute dotproduct(p0 - center, p2 - center) = radius * radius * cos(angle), and thus angle = atan2(crossproduct(p0 - center, p2 - center) , dotproduct(p0 - center, p2 - center) )

◆ isUpwardAtPoint()

bool geos::geom::CircularArc::isUpwardAtPoint ( const CoordinateXY &  q) const
inline

Return true if the arc is pointing positive in the y direction at the location of a specified point. The point is assumed to be on the arc.

References geos::geom::Quadrant::quadrant().

◆ orientation()

int geos::geom::CircularArc::orientation ( ) const
inline

Return the orientation of the arc as one of:

  • algorithm::Orientation::CLOCKWISE,
  • algorithm::Orientation::COUNTERCLOCKWISE
  • algorithm::Orientation::COLLINEAR

References geos::algorithm::Orientation::index().


The documentation for this class was generated from the following file: