Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
JPScore
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
92
Issues
92
List
Boards
Labels
Service Desk
Milestones
Merge Requests
3
Merge Requests
3
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Incidents
Environments
Packages & Registries
Packages & Registries
Container Registry
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
JuPedSim
JPScore
Commits
a5161e99
Commit
a5161e99
authored
Nov 10, 2014
by
Ulrich Kemloh
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
update poly2tri (triangulation engine) to the latest version
parent
73fd216a
Changes
12
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
12 changed files
with
2215 additions
and
2197 deletions
+2215
-2197
poly2tri/common/shapes.cpp
poly2tri/common/shapes.cpp
+217
-219
poly2tri/common/shapes.h
poly2tri/common/shapes.h
+209
-198
poly2tri/common/utils.h
poly2tri/common/utils.h
+127
-120
poly2tri/poly2tri.h
poly2tri/poly2tri.h
+27
-25
poly2tri/sweep/advancing_front.cpp
poly2tri/sweep/advancing_front.cpp
+54
-55
poly2tri/sweep/advancing_front.h
poly2tri/sweep/advancing_front.h
+58
-53
poly2tri/sweep/cdt.cpp
poly2tri/sweep/cdt.cpp
+71
-73
poly2tri/sweep/cdt.h
poly2tri/sweep/cdt.h
+105
-101
poly2tri/sweep/sweep.cpp
poly2tri/sweep/sweep.cpp
+808
-817
poly2tri/sweep/sweep.h
poly2tri/sweep/sweep.h
+250
-247
poly2tri/sweep/sweep_context.cpp
poly2tri/sweep/sweep_context.cpp
+103
-109
poly2tri/sweep/sweep_context.h
poly2tri/sweep/sweep_context.h
+186
-180
No files found.
poly2tri/common/shapes.cpp
View file @
a5161e99
...
...
@@ -35,43 +35,39 @@ namespace p2t {
Triangle
::
Triangle
(
Point
&
a
,
Point
&
b
,
Point
&
c
)
{
points_
[
0
]
=
&
a
;
points_
[
1
]
=
&
b
;
points_
[
2
]
=
&
c
;
neighbors_
[
0
]
=
NULL
;
neighbors_
[
1
]
=
NULL
;
neighbors_
[
2
]
=
NULL
;
constrained_edge
[
0
]
=
constrained_edge
[
1
]
=
constrained_edge
[
2
]
=
false
;
delaunay_edge
[
0
]
=
delaunay_edge
[
1
]
=
delaunay_edge
[
2
]
=
false
;
interior_
=
false
;
points_
[
0
]
=
&
a
;
points_
[
1
]
=
&
b
;
points_
[
2
]
=
&
c
;
neighbors_
[
0
]
=
NULL
;
neighbors_
[
1
]
=
NULL
;
neighbors_
[
2
]
=
NULL
;
constrained_edge
[
0
]
=
constrained_edge
[
1
]
=
constrained_edge
[
2
]
=
false
;
delaunay_edge
[
0
]
=
delaunay_edge
[
1
]
=
delaunay_edge
[
2
]
=
false
;
interior_
=
false
;
}
// Update neighbor pointers
void
Triangle
::
MarkNeighbor
(
Point
*
p1
,
Point
*
p2
,
Triangle
*
t
)
{
if
((
p1
==
points_
[
2
]
&&
p2
==
points_
[
1
])
||
(
p1
==
points_
[
1
]
&&
p2
==
points_
[
2
]))
neighbors_
[
0
]
=
t
;
else
if
((
p1
==
points_
[
0
]
&&
p2
==
points_
[
2
])
||
(
p1
==
points_
[
2
]
&&
p2
==
points_
[
0
]))
neighbors_
[
1
]
=
t
;
else
if
((
p1
==
points_
[
0
]
&&
p2
==
points_
[
1
])
||
(
p1
==
points_
[
1
]
&&
p2
==
points_
[
0
]))
neighbors_
[
2
]
=
t
;
else
assert
(
0
);
if
((
p1
==
points_
[
2
]
&&
p2
==
points_
[
1
])
||
(
p1
==
points_
[
1
]
&&
p2
==
points_
[
2
]))
neighbors_
[
0
]
=
t
;
else
if
((
p1
==
points_
[
0
]
&&
p2
==
points_
[
2
])
||
(
p1
==
points_
[
2
]
&&
p2
==
points_
[
0
]))
neighbors_
[
1
]
=
t
;
else
if
((
p1
==
points_
[
0
]
&&
p2
==
points_
[
1
])
||
(
p1
==
points_
[
1
]
&&
p2
==
points_
[
0
]))
neighbors_
[
2
]
=
t
;
else
assert
(
0
);
}
// Exhaustive search to update neighbor pointers
void
Triangle
::
MarkNeighbor
(
Triangle
&
t
)
{
if
(
t
.
Contains
(
points_
[
1
],
points_
[
2
]))
{
neighbors_
[
0
]
=
&
t
;
t
.
MarkNeighbor
(
points_
[
1
],
points_
[
2
],
this
);
}
else
if
(
t
.
Contains
(
points_
[
0
],
points_
[
2
]))
{
neighbors_
[
1
]
=
&
t
;
t
.
MarkNeighbor
(
points_
[
0
],
points_
[
2
],
this
);
}
else
if
(
t
.
Contains
(
points_
[
0
],
points_
[
1
]))
{
neighbors_
[
2
]
=
&
t
;
t
.
MarkNeighbor
(
points_
[
0
],
points_
[
1
],
this
);
}
if
(
t
.
Contains
(
points_
[
1
],
points_
[
2
]))
{
neighbors_
[
0
]
=
&
t
;
t
.
MarkNeighbor
(
points_
[
1
],
points_
[
2
],
this
);
}
else
if
(
t
.
Contains
(
points_
[
0
],
points_
[
2
]))
{
neighbors_
[
1
]
=
&
t
;
t
.
MarkNeighbor
(
points_
[
0
],
points_
[
2
],
this
);
}
else
if
(
t
.
Contains
(
points_
[
0
],
points_
[
1
]))
{
neighbors_
[
2
]
=
&
t
;
t
.
MarkNeighbor
(
points_
[
0
],
points_
[
1
],
this
);
}
}
/**
...
...
@@ -79,289 +75,291 @@ void Triangle::MarkNeighbor(Triangle& t)
*/
void
Triangle
::
Clear
()
{
Triangle
*
t
;
for
(
int
i
=
0
;
i
<
3
;
i
++
)
{
t
=
neighbors_
[
i
];
if
(
t
!=
NULL
)
{
t
->
ClearNeighbor
(
this
);
}
}
ClearNeighbors
();
points_
[
0
]
=
points_
[
1
]
=
points_
[
2
]
=
NULL
;
Triangle
*
t
;
for
(
int
i
=
0
;
i
<
3
;
i
++
)
{
t
=
neighbors_
[
i
];
if
(
t
!=
NULL
)
{
t
->
ClearNeighbor
(
this
);
}
}
ClearNeighbors
();
points_
[
0
]
=
points_
[
1
]
=
points_
[
2
]
=
NULL
;
}
void
Triangle
::
ClearNeighbor
(
Triangle
*
triangle
)
void
Triangle
::
ClearNeighbor
(
const
Triangle
*
triangle
)
{
if
(
neighbors_
[
0
]
==
triangle
)
{
neighbors_
[
0
]
=
NULL
;
}
else
if
(
neighbors_
[
1
]
==
triangle
)
{
neighbors_
[
1
]
=
NULL
;
}
else
{
neighbors_
[
2
]
=
NULL
;
}
if
(
neighbors_
[
0
]
==
triangle
)
{
neighbors_
[
0
]
=
NULL
;
}
else
if
(
neighbors_
[
1
]
==
triangle
)
{
neighbors_
[
1
]
=
NULL
;
}
else
{
neighbors_
[
2
]
=
NULL
;
}
}
void
Triangle
::
ClearNeighbors
()
{
neighbors_
[
0
]
=
NULL
;
neighbors_
[
1
]
=
NULL
;
neighbors_
[
2
]
=
NULL
;
neighbors_
[
0
]
=
NULL
;
neighbors_
[
1
]
=
NULL
;
neighbors_
[
2
]
=
NULL
;
}
void
Triangle
::
ClearDelunayEdges
()
{
delaunay_edge
[
0
]
=
delaunay_edge
[
1
]
=
delaunay_edge
[
2
]
=
false
;
delaunay_edge
[
0
]
=
delaunay_edge
[
1
]
=
delaunay_edge
[
2
]
=
false
;
}
Point
*
Triangle
::
OppositePoint
(
Triangle
&
t
,
Point
&
p
)
Point
*
Triangle
::
OppositePoint
(
Triangle
&
t
,
const
Point
&
p
)
{
Point
*
cw
=
t
.
PointCW
(
p
);
// double x = cw->x;
// double y = cw->y;
// x = p.x;
// y = p.y;
return
PointCW
(
*
cw
);
Point
*
cw
=
t
.
PointCW
(
p
);
return
PointCW
(
*
cw
);
}
// Legalized triangle by rotating clockwise around point(0)
void
Triangle
::
Legalize
(
Point
&
point
)
{
points_
[
1
]
=
points_
[
0
];
points_
[
0
]
=
points_
[
2
];
points_
[
2
]
=
&
point
;
points_
[
1
]
=
points_
[
0
];
points_
[
0
]
=
points_
[
2
];
points_
[
2
]
=
&
point
;
}
// Legalize triagnle by rotating clockwise around oPoint
void
Triangle
::
Legalize
(
Point
&
opoint
,
Point
&
npoint
)
{
if
(
&
opoint
==
points_
[
0
])
{
points_
[
1
]
=
points_
[
0
];
points_
[
0
]
=
points_
[
2
];
points_
[
2
]
=
&
npoint
;
}
else
if
(
&
opoint
==
points_
[
1
])
{
points_
[
2
]
=
points_
[
1
];
points_
[
1
]
=
points_
[
0
];
points_
[
0
]
=
&
npoint
;
}
else
if
(
&
opoint
==
points_
[
2
])
{
points_
[
0
]
=
points_
[
2
];
points_
[
2
]
=
points_
[
1
];
points_
[
1
]
=
&
npoint
;
}
else
{
assert
(
0
);
}
if
(
&
opoint
==
points_
[
0
])
{
points_
[
1
]
=
points_
[
0
];
points_
[
0
]
=
points_
[
2
];
points_
[
2
]
=
&
npoint
;
}
else
if
(
&
opoint
==
points_
[
1
])
{
points_
[
2
]
=
points_
[
1
];
points_
[
1
]
=
points_
[
0
];
points_
[
0
]
=
&
npoint
;
}
else
if
(
&
opoint
==
points_
[
2
])
{
points_
[
0
]
=
points_
[
2
];
points_
[
2
]
=
points_
[
1
];
points_
[
1
]
=
&
npoint
;
}
else
{
assert
(
0
);
}
}
int
Triangle
::
Index
(
const
Point
*
p
)
{
if
(
p
==
points_
[
0
])
{
return
0
;
}
else
if
(
p
==
points_
[
1
])
{
return
1
;
}
else
if
(
p
==
points_
[
2
])
{
return
2
;
}
assert
(
0
);
return
-
1
;
// just to et rid of some warnings
if
(
p
==
points_
[
0
])
{
return
0
;
}
else
if
(
p
==
points_
[
1
])
{
return
1
;
}
else
if
(
p
==
points_
[
2
])
{
return
2
;
}
assert
(
0
);
return
-
1
;
}
int
Triangle
::
EdgeIndex
(
const
Point
*
p1
,
const
Point
*
p2
)
{
if
(
points_
[
0
]
==
p1
)
{
if
(
points_
[
1
]
==
p2
)
{
return
2
;
}
else
if
(
points_
[
2
]
==
p2
)
{
return
1
;
}
}
else
if
(
points_
[
1
]
==
p1
)
{
if
(
points_
[
2
]
==
p2
)
{
return
0
;
}
else
if
(
points_
[
0
]
==
p2
)
{
return
2
;
}
}
else
if
(
points_
[
2
]
==
p1
)
{
if
(
points_
[
0
]
==
p2
)
{
return
1
;
}
else
if
(
points_
[
1
]
==
p2
)
{
return
0
;
}
}
return
-
1
;
if
(
points_
[
0
]
==
p1
)
{
if
(
points_
[
1
]
==
p2
)
{
return
2
;
}
else
if
(
points_
[
2
]
==
p2
)
{
return
1
;
}
}
else
if
(
points_
[
1
]
==
p1
)
{
if
(
points_
[
2
]
==
p2
)
{
return
0
;
}
else
if
(
points_
[
0
]
==
p2
)
{
return
2
;
}
}
else
if
(
points_
[
2
]
==
p1
)
{
if
(
points_
[
0
]
==
p2
)
{
return
1
;
}
else
if
(
points_
[
1
]
==
p2
)
{
return
0
;
}
}
return
-
1
;
}
void
Triangle
::
MarkConstrainedEdge
(
const
int
index
)
void
Triangle
::
MarkConstrainedEdge
(
int
index
)
{
constrained_edge
[
index
]
=
true
;
constrained_edge
[
index
]
=
true
;
}
void
Triangle
::
MarkConstrainedEdge
(
Edge
&
edge
)
{
MarkConstrainedEdge
(
edge
.
p
,
edge
.
q
);
MarkConstrainedEdge
(
edge
.
p
,
edge
.
q
);
}
// Mark edge as constrained
void
Triangle
::
MarkConstrainedEdge
(
Point
*
p
,
Point
*
q
)
{
if
((
q
==
points_
[
0
]
&&
p
==
points_
[
1
])
||
(
q
==
points_
[
1
]
&&
p
==
points_
[
0
]))
{
constrained_edge
[
2
]
=
true
;
}
else
if
((
q
==
points_
[
0
]
&&
p
==
points_
[
2
])
||
(
q
==
points_
[
2
]
&&
p
==
points_
[
0
]))
{
constrained_edge
[
1
]
=
true
;
}
else
if
((
q
==
points_
[
1
]
&&
p
==
points_
[
2
])
||
(
q
==
points_
[
2
]
&&
p
==
points_
[
1
]))
{
constrained_edge
[
0
]
=
true
;
}
if
((
q
==
points_
[
0
]
&&
p
==
points_
[
1
])
||
(
q
==
points_
[
1
]
&&
p
==
points_
[
0
]))
{
constrained_edge
[
2
]
=
true
;
}
else
if
((
q
==
points_
[
0
]
&&
p
==
points_
[
2
])
||
(
q
==
points_
[
2
]
&&
p
==
points_
[
0
]))
{
constrained_edge
[
1
]
=
true
;
}
else
if
((
q
==
points_
[
1
]
&&
p
==
points_
[
2
])
||
(
q
==
points_
[
2
]
&&
p
==
points_
[
1
]))
{
constrained_edge
[
0
]
=
true
;
}
}
// The point counter-clockwise to given point
Point
*
Triangle
::
PointCW
(
Point
&
point
)
Point
*
Triangle
::
PointCW
(
const
Point
&
point
)
{
if
(
&
point
==
points_
[
0
])
{
return
points_
[
2
];
}
else
if
(
&
point
==
points_
[
1
])
{
return
points_
[
0
];
}
else
if
(
&
point
==
points_
[
2
])
{
return
points_
[
1
];
}
assert
(
0
);
return
NULL
;
if
(
&
point
==
points_
[
0
])
{
return
points_
[
2
];
}
else
if
(
&
point
==
points_
[
1
])
{
return
points_
[
0
];
}
else
if
(
&
point
==
points_
[
2
])
{
return
points_
[
1
];
}
assert
(
0
);
return
NULL
;
}
// The point counter-clockwise to given point
Point
*
Triangle
::
PointCCW
(
Point
&
point
)
Point
*
Triangle
::
PointCCW
(
const
Point
&
point
)
{
if
(
&
point
==
points_
[
0
])
{
return
points_
[
1
];
}
else
if
(
&
point
==
points_
[
1
])
{
return
points_
[
2
];
}
else
if
(
&
point
==
points_
[
2
])
{
return
points_
[
0
];
}
assert
(
0
);
return
NULL
;
if
(
&
point
==
points_
[
0
])
{
return
points_
[
1
];
}
else
if
(
&
point
==
points_
[
1
])
{
return
points_
[
2
];
}
else
if
(
&
point
==
points_
[
2
])
{
return
points_
[
0
];
}
assert
(
0
);
return
NULL
;
}
// The neighbor clockwise to given point
Triangle
*
Triangle
::
NeighborCW
(
Point
&
point
)
Triangle
*
Triangle
::
NeighborCW
(
const
Point
&
point
)
{
if
(
&
point
==
points_
[
0
])
{
return
neighbors_
[
1
];
}
else
if
(
&
point
==
points_
[
1
])
{
return
neighbors_
[
2
];
}
return
neighbors_
[
0
];
if
(
&
point
==
points_
[
0
])
{
return
neighbors_
[
1
];
}
else
if
(
&
point
==
points_
[
1
])
{
return
neighbors_
[
2
];
}
return
neighbors_
[
0
];
}
// The neighbor counter-clockwise to given point
Triangle
*
Triangle
::
NeighborCCW
(
Point
&
point
)
Triangle
*
Triangle
::
NeighborCCW
(
const
Point
&
point
)
{
if
(
&
point
==
points_
[
0
])
{
return
neighbors_
[
2
];
}
else
if
(
&
point
==
points_
[
1
])
{
return
neighbors_
[
0
];
}
return
neighbors_
[
1
];
if
(
&
point
==
points_
[
0
])
{
return
neighbors_
[
2
];
}
else
if
(
&
point
==
points_
[
1
])
{
return
neighbors_
[
0
];
}
return
neighbors_
[
1
];
}
bool
Triangle
::
GetConstrainedEdgeCCW
(
Point
&
p
)
bool
Triangle
::
GetConstrainedEdgeCCW
(
const
Point
&
p
)
{
if
(
&
p
==
points_
[
0
])
{
return
constrained_edge
[
2
];
}
else
if
(
&
p
==
points_
[
1
])
{
return
constrained_edge
[
0
];
}
return
constrained_edge
[
1
];
if
(
&
p
==
points_
[
0
])
{
return
constrained_edge
[
2
];
}
else
if
(
&
p
==
points_
[
1
])
{
return
constrained_edge
[
0
];
}
return
constrained_edge
[
1
];
}
bool
Triangle
::
GetConstrainedEdgeCW
(
Point
&
p
)
bool
Triangle
::
GetConstrainedEdgeCW
(
const
Point
&
p
)
{
if
(
&
p
==
points_
[
0
])
{
return
constrained_edge
[
1
];
}
else
if
(
&
p
==
points_
[
1
])
{
return
constrained_edge
[
2
];
}
return
constrained_edge
[
0
];
if
(
&
p
==
points_
[
0
])
{
return
constrained_edge
[
1
];
}
else
if
(
&
p
==
points_
[
1
])
{
return
constrained_edge
[
2
];
}
return
constrained_edge
[
0
];
}
void
Triangle
::
SetConstrainedEdgeCCW
(
Point
&
p
,
bool
ce
)
void
Triangle
::
SetConstrainedEdgeCCW
(
const
Point
&
p
,
bool
ce
)
{
if
(
&
p
==
points_
[
0
])
{
constrained_edge
[
2
]
=
ce
;
}
else
if
(
&
p
==
points_
[
1
])
{
constrained_edge
[
0
]
=
ce
;
}
else
{
constrained_edge
[
1
]
=
ce
;
}
if
(
&
p
==
points_
[
0
])
{
constrained_edge
[
2
]
=
ce
;
}
else
if
(
&
p
==
points_
[
1
])
{
constrained_edge
[
0
]
=
ce
;
}
else
{
constrained_edge
[
1
]
=
ce
;
}
}
void
Triangle
::
SetConstrainedEdgeCW
(
Point
&
p
,
bool
ce
)
void
Triangle
::
SetConstrainedEdgeCW
(
const
Point
&
p
,
bool
ce
)
{
if
(
&
p
==
points_
[
0
])
{
constrained_edge
[
1
]
=
ce
;
}
else
if
(
&
p
==
points_
[
1
])
{
constrained_edge
[
2
]
=
ce
;
}
else
{
constrained_edge
[
0
]
=
ce
;
}
if
(
&
p
==
points_
[
0
])
{
constrained_edge
[
1
]
=
ce
;
}
else
if
(
&
p
==
points_
[
1
])
{
constrained_edge
[
2
]
=
ce
;
}
else
{
constrained_edge
[
0
]
=
ce
;
}
}
bool
Triangle
::
GetDelunayEdgeCCW
(
Point
&
p
)
bool
Triangle
::
GetDelunayEdgeCCW
(
const
Point
&
p
)
{
if
(
&
p
==
points_
[
0
])
{
return
delaunay_edge
[
2
];
}
else
if
(
&
p
==
points_
[
1
])
{
return
delaunay_edge
[
0
];
}
return
delaunay_edge
[
1
];
if
(
&
p
==
points_
[
0
])
{
return
delaunay_edge
[
2
];
}
else
if
(
&
p
==
points_
[
1
])
{
return
delaunay_edge
[
0
];
}
return
delaunay_edge
[
1
];
}
bool
Triangle
::
GetDelunayEdgeCW
(
Point
&
p
)
bool
Triangle
::
GetDelunayEdgeCW
(
const
Point
&
p
)
{
if
(
&
p
==
points_
[
0
])
{
return
delaunay_edge
[
1
];
}
else
if
(
&
p
==
points_
[
1
])
{
return
delaunay_edge
[
2
];
}
return
delaunay_edge
[
0
];
if
(
&
p
==
points_
[
0
])
{
return
delaunay_edge
[
1
];
}
else
if
(
&
p
==
points_
[
1
])
{
return
delaunay_edge
[
2
];
}
return
delaunay_edge
[
0
];
}
void
Triangle
::
SetDelunayEdgeCCW
(
Point
&
p
,
bool
e
)
void
Triangle
::
SetDelunayEdgeCCW
(
const
Point
&
p
,
bool
e
)
{
if
(
&
p
==
points_
[
0
])
{
delaunay_edge
[
2
]
=
e
;
}
else
if
(
&
p
==
points_
[
1
])
{
delaunay_edge
[
0
]
=
e
;
}
else
{
delaunay_edge
[
1
]
=
e
;
}
if
(
&
p
==
points_
[
0
])
{
delaunay_edge
[
2
]
=
e
;
}
else
if
(
&
p
==
points_
[
1
])
{
delaunay_edge
[
0
]
=
e
;
}
else
{
delaunay_edge
[
1
]
=
e
;
}
}
void
Triangle
::
SetDelunayEdgeCW
(
Point
&
p
,
bool
e
)
void
Triangle
::
SetDelunayEdgeCW
(
const
Point
&
p
,
bool
e
)
{
if
(
&
p
==
points_
[
0
])
{
delaunay_edge
[
1
]
=
e
;
}
else
if
(
&
p
==
points_
[
1
])
{
delaunay_edge
[
2
]
=
e
;
}
else
{
delaunay_edge
[
0
]
=
e
;
}
if
(
&
p
==
points_
[
0
])
{
delaunay_edge
[
1
]
=
e
;
}
else
if
(
&
p
==
points_
[
1
])
{
delaunay_edge
[
2
]
=
e
;
}
else
{
delaunay_edge
[
0
]
=
e
;
}
}
// The neighbor across to given point
Triangle
&
Triangle
::
NeighborAcross
(
Point
&
opoint
)
Triangle
&
Triangle
::
NeighborAcross
(
const
Point
&
opoint
)
{
if
(
&
opoint
==
points_
[
0
])
{
return
*
neighbors_
[
0
];
}
else
if
(
&
opoint
==
points_
[
1
])
{
return
*
neighbors_
[
1
];
}
return
*
neighbors_
[
2
];
if
(
&
opoint
==
points_
[
0
])
{
return
*
neighbors_
[
0
];
}
else
if
(
&
opoint
==
points_
[
1
])
{
return
*
neighbors_
[
1
];
}
return
*
neighbors_
[
2
];
}
void
Triangle
::
DebugPrint
()
{
using
namespace
std
;
cout
<<
points_
[
0
]
->
x
<<
","
<<
points_
[
0
]
->
y
<<
" "
;
cout
<<
points_
[
1
]
->
x
<<
","
<<
points_
[
1
]
->
y
<<
" "
;
cout
<<
points_
[
2
]
->
x
<<
","
<<
points_
[
2
]
->
y
<<
endl
;
}
using
namespace
std
;
cout
<<
points_
[
0
]
->
x
<<
","
<<
points_
[
0
]
->
y
<<
" "
;
cout
<<
points_
[
1
]
->
x
<<
","
<<
points_
[
1
]
->
y
<<
" "
;
cout
<<
points_
[
2
]
->
x
<<
","
<<
points_
[
2
]
->
y
<<
endl
;
}
}
\ No newline at end of file
poly2tri/common/shapes.h
View file @
a5161e99
/**
* \file shapes.h
* \date Jul 4, 2014
* \version v0.5
* \copyright <2009-2014> Forschungszentrum Jülich GmbH. All rights reserved.
*
* \section License
* This file is part of JuPedSim.
*
* JuPedSim is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* any later version.
/*
* Poly2Tri Copyright (c) 2009-2010, Poly2Tri Contributors
* http://code.google.com/p/poly2tri/
*
* JuPedSim is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* All rights reserved.
*
*
You should have received a copy of the GNU Lesser General Public License
* a
long with JuPedSim. If not, see <http://www.gnu.org/licenses/>.
*
Redistribution and use in source and binary forms, with or without modification,
* a
re permitted provided that the following conditions are met:
*
* \section Description
* * Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
* * Neither the name of Poly2Tri nor the names of its contributors may be
* used to endorse or promote products derived from this software without specific
* prior written permission.
*
*
**/
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
// Include guard
#ifndef SHAPES_H
...
...
@@ -41,94 +44,104 @@ struct Edge;
struct
Point
{
double
x
,
y
;
/// Default constructor does nothing (for performance).
Point
()
{
x
=
0.0
;