GEOS 3.14.0dev
Triangle.h
1/**********************************************************************
2 *
3 * GEOS - Geometry Engine Open Source
4 * http://geos.osgeo.org
5 *
6 * Copyright (C) 2006 Refractions Research Inc.
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#pragma once
16
17#include <geos/export.h>
18#include <geos/geom/Coordinate.h>
19
20namespace geos {
21namespace geom { // geos::geom
22
28class GEOS_DLL Triangle {
29public:
30 CoordinateXY p0, p1, p2;
31
32 Triangle(const CoordinateXY& nP0, const CoordinateXY& nP1, const CoordinateXY& nP2)
33 : p0(nP0)
34 , p1(nP1)
35 , p2(nP2) {}
36
37
46 void inCentre(CoordinateXY& resultPoint);
47
48 static CoordinateXY inCentre(
49 const CoordinateXY& p0,
50 const CoordinateXY& p1,
51 const CoordinateXY& p2);
52
70 void circumcentre(CoordinateXY& resultPoint);
71
75 void circumcentreDD(CoordinateXY& resultPoint);
76
85 static const CoordinateXY circumcentre(const CoordinateXY& p0, const CoordinateXY& p1, const CoordinateXY& p2);
86
96 static double circumradius(const CoordinateXY& a, const CoordinateXY& b, const CoordinateXY& c);
97
103 double circumradius() const
104 {
105 return circumradius(p0, p1, p2);
106 };
107
108 bool isIsoceles();
109
123 static bool isAcute(const CoordinateXY& a, const CoordinateXY& b, const CoordinateXY& c);
124
133 static bool isCCW(const CoordinateXY& a, const CoordinateXY& b, const CoordinateXY& c);
134
135
145 static bool intersects(const CoordinateXY& a, const CoordinateXY& b, const CoordinateXY& c,
146 const CoordinateXY& p);
147
148
154 bool intersects(const CoordinateXY& p) { return intersects(p0, p1, p2, p); };
155
160 bool isCCW() { return isCCW(p0, p1, p2); };
161
166 bool isAcute() { return isAcute(p0, p1, p2); };
167
176 static double longestSideLength(
177 const CoordinateXY& a,
178 const CoordinateXY& b,
179 const CoordinateXY& c);
180
189 static double length(const CoordinateXY& a, const CoordinateXY& b, const CoordinateXY& c);
190
196 double length() const;
197
207 static double area(const CoordinateXY& a, const CoordinateXY& b, const CoordinateXY& c);
208
209 double area() const;
210
211private:
212
227 double det(double m00, double m01, double m10, double m11) const;
228
229};
230
231
232
233} // namespace geos::geom
234} // namespace geos
235
Represents a planar triangle, and provides methods for calculating various properties of triangles.
Definition Triangle.h:28
bool isCCW()
Definition Triangle.h:160
bool isAcute()
Definition Triangle.h:166
double length() const
void circumcentre(CoordinateXY &resultPoint)
Computes the circumcentre of a triangle.
static bool isAcute(const CoordinateXY &a, const CoordinateXY &b, const CoordinateXY &c)
static double circumradius(const CoordinateXY &a, const CoordinateXY &b, const CoordinateXY &c)
double circumradius() const
Definition Triangle.h:103
static bool intersects(const CoordinateXY &a, const CoordinateXY &b, const CoordinateXY &c, const CoordinateXY &p)
void circumcentreDD(CoordinateXY &resultPoint)
static bool isCCW(const CoordinateXY &a, const CoordinateXY &b, const CoordinateXY &c)
void inCentre(CoordinateXY &resultPoint)
The inCentre of a triangle is the point which is equidistant from the sides of the triangle.
bool intersects(const CoordinateXY &p)
Definition Triangle.h:154
static double area(const CoordinateXY &a, const CoordinateXY &b, const CoordinateXY &c)
static const CoordinateXY circumcentre(const CoordinateXY &p0, const CoordinateXY &p1, const CoordinateXY &p2)
static double length(const CoordinateXY &a, const CoordinateXY &b, const CoordinateXY &c)
static double longestSideLength(const CoordinateXY &a, const CoordinateXY &b, const CoordinateXY &c)
Basic namespace for all GEOS functionalities.
Definition geos.h:38