costmap_2d
src
costmap_math.cpp
Go to the documentation of this file.
1
/*
2
* Copyright (c) 2013, Willow Garage, Inc.
3
* All rights reserved.
4
*
5
* Redistribution and use in source and binary forms, with or without
6
* modification, are permitted provided that the following conditions are met:
7
*
8
* * Redistributions of source code must retain the above copyright
9
* notice, this list of conditions and the following disclaimer.
10
* * Redistributions in binary form must reproduce the above copyright
11
* notice, this list of conditions and the following disclaimer in the
12
* documentation and/or other materials provided with the distribution.
13
* * Neither the name of the Willow Garage, Inc. nor the names of its
14
* contributors may be used to endorse or promote products derived from
15
* this software without specific prior written permission.
16
*
17
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
18
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
21
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
22
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
23
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
24
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
25
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
26
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
27
* POSSIBILITY OF SUCH DAMAGE.
28
*/
29
30
#include <
costmap_2d/costmap_math.h
>
31
32
double
distanceToLine
(
double
pX,
double
pY,
double
x0,
double
y0,
double
x1,
double
y1)
33
{
34
double
A = pX - x0;
35
double
B = pY - y0;
36
double
C = x1 - x0;
37
double
D = y1 - y0;
38
39
double
dot = A * C + B * D;
40
double
len_sq = C * C + D * D;
41
double
param = dot / len_sq;
42
43
double
xx, yy;
44
45
if
(param < 0)
46
{
47
xx = x0;
48
yy = y0;
49
}
50
else
if
(param > 1)
51
{
52
xx = x1;
53
yy = y1;
54
}
55
else
56
{
57
xx = x0 + param * C;
58
yy = y0 + param * D;
59
}
60
61
return
distance
(pX, pY, xx, yy);
62
}
63
64
bool
intersects
(
std::vector<geometry_msgs::Point>
& polygon,
float
testx,
float
testy)
65
{
66
bool
c =
false
;
67
int
i, j, nvert = polygon.
size
();
68
for
(i = 0, j = nvert - 1; i < nvert; j = i++)
69
{
70
float
yi = polygon[i].y, yj = polygon[j].y, xi = polygon[i].x, xj = polygon[j].x;
71
72
if
(((yi > testy) != (yj > testy)) && (testx < (xj - xi) * (testy - yi) / (yj - yi) + xi))
73
c = !c;
74
}
75
return
c;
76
}
77
78
bool
intersects_helper
(
std::vector<geometry_msgs::Point>
& polygon1,
std::vector<geometry_msgs::Point>
& polygon2)
79
{
80
for
(
unsigned
int
i = 0; i < polygon1.
size
(); i++)
81
if
(
intersects
(polygon2, polygon1[i].x, polygon1[i].y))
82
return
true
;
83
return
false
;
84
}
85
86
bool
intersects
(
std::vector<geometry_msgs::Point>
& polygon1,
std::vector<geometry_msgs::Point>
& polygon2)
87
{
88
return
intersects_helper
(polygon1, polygon2) ||
intersects_helper
(polygon2, polygon1);
89
}
std::vector< geometry_msgs::Point >
std::vector::size
T size(T... args)
distanceToLine
double distanceToLine(double pX, double pY, double x0, double y0, double x1, double y1)
Definition:
costmap_math.cpp:32
intersects
bool intersects(std::vector< geometry_msgs::Point > &polygon, float testx, float testy)
Definition:
costmap_math.cpp:64
distance
double distance(double x0, double y0, double x1, double y1)
Definition:
costmap_math.h:58
costmap_math.h
intersects_helper
bool intersects_helper(std::vector< geometry_msgs::Point > &polygon1, std::vector< geometry_msgs::Point > &polygon2)
Definition:
costmap_math.cpp:78
Generated on Sun Feb 23 2025 04:33:26 for costmap_2d by
1.8.17