Eclipse SUMO - Simulation of Urban MObility
All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
Triangle.h
Go to the documentation of this file.
1/****************************************************************************/
2// Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.dev/sumo
3// Copyright (C) 2001-2025 German Aerospace Center (DLR) and others.
4// This program and the accompanying materials are made available under the
5// terms of the Eclipse Public License 2.0 which is available at
6// https://www.eclipse.org/legal/epl-2.0/
7// This Source Code may also be made available under the following Secondary
8// Licenses when the conditions for such availability set forth in the Eclipse
9// Public License 2.0 are satisfied: GNU General Public License, version 2
10// or later which is available at
11// https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html
12// SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-or-later
13/****************************************************************************/
18// A simple triangle defined in 3D
19/****************************************************************************/
20#pragma once
21#include <config.h>
22
23#include <vector>
24
25#include "PositionVector.h"
26#include "Boundary.h"
27
28// ===========================================================================
29// class definitions
30// ===========================================================================
35class Triangle {
36
37public:
39 static const Triangle INVALID;
40
42 Triangle();
43
45 Triangle(const Position& positionA, const Position& positionB, const Position& positionC);
46
48 ~Triangle();
49
51 const Boundary& getBoundary() const;
52
54 const PositionVector getShape() const;
55
57 bool isPositionWithin(const Position& pos) const;
58
60 bool isBoundaryFullWithin(const Boundary& boundary) const;
61
63 bool intersectWithShape(const PositionVector& shape) const;
64
66 bool intersectWithShape(const PositionVector& shape, const Boundary& shapeBoundary) const;
67
69 bool intersectWithCircle(const Position& center, const double radius) const;
70
71 // @brief triangulate using Ear Clipping algorithm
72 static std::vector<Triangle> triangulate(PositionVector shape);
73
75 bool operator==(const Triangle& other) const;
76
78 bool operator!=(const Triangle& other) const;
79
80private:
84 static bool isPositionWithin(const Position& A, const Position& B, const Position& C, const Position& pos);
85
87 static bool isEar(const Position& a, const Position& b, const Position& c, const PositionVector& shape);
88
90 static double crossProduct(const Position& a, const Position& b, const Position& c);
91
93
97 int orientation(const Position& p, const Position& q, const Position& r) const;
98
100 bool onSegment(const Position& p, const Position& q, const Position& r) const;
101
103 bool segmentsIntersect(const Position& p1, const Position& q1, const Position& p2, const Position& q2) const;
104
106 bool lineIntersectsTriangle(const Position& p1, const Position& p2) const;
107
109
111 bool lineIntersectCircle(const Position& posA, const Position& posB, const Position& center, const double radius) const;
112
115
118
121
124};
A class that stores a 2D geometrical boundary.
Definition Boundary.h:39
A point in 2D or 3D with translation and scaling methods.
Definition Position.h:37
static const Position INVALID
used to indicate that a position is valid
Definition Position.h:319
A list of positions.
A simple triangle defined in 3D.
Definition Triangle.h:35
const Boundary & getBoundary() const
get triangle boundary
Definition Triangle.cpp:117
int orientation(const Position &p, const Position &q, const Position &r) const
Definition Triangle.cpp:215
bool segmentsIntersect(const Position &p1, const Position &q1, const Position &p2, const Position &q2) const
check if two line segments (p1,q1) and (p2,q2) intersect
Definition Triangle.cpp:238
Boundary myBoundary
triangle boundary
Definition Triangle.h:123
bool operator!=(const Triangle &other) const
inequality operator
Definition Triangle.cpp:175
bool isPositionWithin(const Position &pos) const
check if the given position is within this triangle
Definition Triangle.cpp:53
const PositionVector getShape() const
get shape boundary
Definition Triangle.cpp:123
bool isBoundaryFullWithin(const Boundary &boundary) const
check if the given position is FULL within this triangle
Definition Triangle.cpp:59
~Triangle()
destructor
Definition Triangle.cpp:49
static const Triangle INVALID
invalid triangle
Definition Triangle.h:39
static bool isEar(const Position &a, const Position &b, const Position &c, const PositionVector &shape)
Check if the triangle (A, B, C) is an ear.
Definition Triangle.cpp:193
bool lineIntersectsTriangle(const Position &p1, const Position &p2) const
check if a line segment (p1, p2) intersects this triangle
Definition Triangle.cpp:262
static std::vector< Triangle > triangulate(PositionVector shape)
Definition Triangle.cpp:129
bool intersectWithShape(const PositionVector &shape) const
check if the given shape is within or intersect with this triangle
Definition Triangle.cpp:68
Position myB
second triangle position
Definition Triangle.h:117
Triangle()
default constructor
Definition Triangle.cpp:35
bool onSegment(const Position &p, const Position &q, const Position &r) const
check if point q lies on segment pr
Definition Triangle.cpp:231
Position myA
first triangle position
Definition Triangle.h:114
bool operator==(const Triangle &other) const
equalityoperators
Definition Triangle.cpp:169
Position myC
third triangle position
Definition Triangle.h:120
bool lineIntersectCircle(const Position &posA, const Position &posB, const Position &center, const double radius) const
function to check if line between posA and posB intersect circle
Definition Triangle.cpp:270
bool intersectWithCircle(const Position &center, const double radius) const
check if the given circle intersect with this triangle
Definition Triangle.cpp:104
static double crossProduct(const Position &a, const Position &b, const Position &c)
calculate cross product of the given points
Definition Triangle.cpp:209