GEOS  3.4.2
Angle.h
1 /**********************************************************************
2  *
3  * GEOS - Geometry Engine Open Source
4  * http://geos.osgeo.org
5  *
6  * Copyright (C) 2009-2011 Sandro Santilli <strk@keybit.net>
7  *
8  * This is free software; you can redistribute and/or modify it under
9  * the terms of the GNU Lesser General Public Licence as published
10  * by the Free Software Foundation.
11  * See the COPYING file for more information.
12  *
13  **********************************************************************
14  *
15  * Last port: algorithm/Angle.java r378 (JTS-1.12)
16  *
17  **********************************************************************/
18 
19 #ifndef GEOS_ALGORITHM_ANGLE_H
20 #define GEOS_ALGORITHM_ANGLE_H
21 
22 #include <geos/export.h>
23 #include <geos/algorithm/CGAlgorithms.h> // for constants
24 
25 // Forward declarations
26 namespace geos {
27  namespace geom {
28  class Coordinate;
29  }
30 }
31 
32 namespace geos {
33 namespace algorithm { // geos::algorithm
34 
36 //
39 class GEOS_DLL Angle
40 {
41 public:
42 
43  static const double PI_TIMES_2; // 2.0 * PI;
44  static const double PI_OVER_2; // PI / 2.0;
45  static const double PI_OVER_4; // PI / 4.0;
46 
48  static const int COUNTERCLOCKWISE = CGAlgorithms::COUNTERCLOCKWISE;
49 
51  static const int CLOCKWISE = CGAlgorithms::CLOCKWISE;
52 
54  static const int NONE = CGAlgorithms::COLLINEAR;
55 
57  //
61  static double toDegrees(double radians);
62 
64  //
68  static double toRadians(double angleDegrees);
69 
73  //
79  static double angle(const geom::Coordinate& p0,
80  const geom::Coordinate& p1);
81 
85  //
91  static double angle(const geom::Coordinate& p);
92 
94  //
104  static bool isAcute(const geom::Coordinate& p0,
105  const geom::Coordinate& p1,
106  const geom::Coordinate& p2);
107 
109  //
119  static bool isObtuse(const geom::Coordinate& p0,
120  const geom::Coordinate& p1,
121  const geom::Coordinate& p2);
122 
124  //
132  static double angleBetween(const geom::Coordinate& tip1,
133  const geom::Coordinate& tail,
134  const geom::Coordinate& tip2);
135 
137  //
148  static double angleBetweenOriented(const geom::Coordinate& tip1,
149  const geom::Coordinate& tail,
150  const geom::Coordinate& tip2);
151 
153  //
165  static double interiorAngle(const geom::Coordinate& p0,
166  const geom::Coordinate& p1,
167  const geom::Coordinate& p2);
168 
178  static int getTurn(double ang1, double ang2);
179 
187  static double normalize(double angle);
188 
207  static double normalizePositive(double angle);
208 
209 
211  //
220  static double diff(double ang1, double ang2);
221 };
222 
223 
224 } // namespace geos::algorithm
225 } // namespace geos
226 
227 
228 #endif // GEOS_ALGORITHM_ANGLE_H
Coordinate is the lightweight class used to store coordinates.
Definition: Coordinate.h:60
Utility functions for working with angles.
Definition: Angle.h:39