21#include <geos/export.h>
22#include <geos/algorithm/Orientation.h>
41 static constexpr double PI_TIMES_2 = 2.0 * MATH_PI;
42 static constexpr double PI_OVER_2 = MATH_PI / 2.0;
43 static constexpr double PI_OVER_4 = MATH_PI / 4.0;
46 static const int COUNTERCLOCKWISE = Orientation::COUNTERCLOCKWISE;
49 static const int CLOCKWISE = Orientation::CLOCKWISE;
52 static const int NONE = Orientation::COLLINEAR;
77 static double angle(
const geom::CoordinateXY& p0,
78 const geom::CoordinateXY& p1);
89 static double angle(
const geom::CoordinateXY& p);
102 static bool isAcute(
const geom::CoordinateXY& p0,
103 const geom::CoordinateXY& p1,
104 const geom::CoordinateXY& p2);
118 const geom::CoordinateXY& p1,
119 const geom::CoordinateXY& p2);
131 const geom::CoordinateXY& tail,
132 const geom::CoordinateXY& tip2);
147 const geom::CoordinateXY& tail,
148 const geom::CoordinateXY& tip2);
160 static double bisector(
const geom::CoordinateXY& tip1,
161 const geom::CoordinateXY& tail,
162 const geom::CoordinateXY& tip2);
178 const geom::CoordinateXY& p1,
179 const geom::CoordinateXY& p2);
239 static double nextCCW(
double from,
double a,
double b);
260 static double diff(
double ang1,
double ang2);
274 static inline void sinCosSnap(
const double ang,
double& rSin,
double& rCos) {
275 rSin = std::sin(ang);
276 rCos = std::cos(ang);
278 if (std::fabs(rSin) < 5e-16) rSin = 0.0;
279 if (std::fabs(rCos) < 5e-16) rCos = 0.0;
289 static geom::CoordinateXY
project(
const geom::CoordinateXY& p,
290 double angle,
double dist);
Utility functions for working with angles.
Definition Angle.h:38
static double angle(const geom::CoordinateXY &p)
Returns the angle that the vector from (0,0) to p, relative to the positive X-axis.
static double diff(double ang1, double ang2)
static double bisector(const geom::CoordinateXY &tip1, const geom::CoordinateXY &tail, const geom::CoordinateXY &tip2)
static void sinCosSnap(const double ang, double &rSin, double &rCos)
Computes both sin and cos of an angle, snapping near-zero values to zero.
Definition Angle.h:274
static double angleBetween(const geom::CoordinateXY &tip1, const geom::CoordinateXY &tail, const geom::CoordinateXY &tip2)
static int getTurn(double ang1, double ang2)
Returns whether an angle must turn clockwise or counterclockwise to overlap another angle.
static double nextCCW(double from, double a, double b)
static double interiorAngle(const geom::CoordinateXY &p0, const geom::CoordinateXY &p1, const geom::CoordinateXY &p2)
static geom::CoordinateXY project(const geom::CoordinateXY &p, double angle, double dist)
static bool isObtuse(const geom::CoordinateXY &p0, const geom::CoordinateXY &p1, const geom::CoordinateXY &p2)
static double toDegrees(double radians)
static double angle(const geom::CoordinateXY &p0, const geom::CoordinateXY &p1)
Returns the angle of the vector from p0 to p1, relative to the positive X-axis.
static double normalizePositive(double angle)
Computes the normalized positive value of an angle, which is the equivalent angle in the range [ 0,...
static double fractionCCW(double x, double a, double b)
static double normalize(double angle)
Computes the normalized value of an angle, which is the equivalent angle in the range ( -Pi,...
static bool isAcute(const geom::CoordinateXY &p0, const geom::CoordinateXY &p1, const geom::CoordinateXY &p2)
static double toRadians(double angleDegrees)
static bool isWithinCCW(double angle, double from, double to)
static double angleBetweenOriented(const geom::CoordinateXY &tip1, const geom::CoordinateXY &tail, const geom::CoordinateXY &tip2)
Coordinate is the lightweight class used to store coordinates.
Definition Coordinate.h:220
Basic namespace for all GEOS functionalities.
Definition geos.h:38