Merge pull request #1327 from romulox-x/polygonPathFinderClosestPoint
changed PolygonPathFinder::get_closest_point to return the closest posit...
This commit is contained in:
commit
b4e1c1d717
1 changed files with 17 additions and 9 deletions
|
@ -525,24 +525,32 @@ bool PolygonPathFinder::is_point_inside(const Vector2& p_point) const {
|
||||||
|
|
||||||
Vector2 PolygonPathFinder::get_closest_point(const Vector2& p_point) const {
|
Vector2 PolygonPathFinder::get_closest_point(const Vector2& p_point) const {
|
||||||
|
|
||||||
int closest_idx=-1;
|
|
||||||
float closest_dist=1e20;
|
float closest_dist=1e20;
|
||||||
for(int i=0;i<points.size()-2;i++) {
|
Vector2 closest_point;
|
||||||
|
|
||||||
|
for (Set<Edge>::Element *E=edges.front();E;E=E->next()) {
|
||||||
|
|
||||||
|
const Edge& e=E->get();
|
||||||
|
Vector2 seg[2]={
|
||||||
|
points[e.points[0]].pos,
|
||||||
|
points[e.points[1]].pos
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
Vector2 closest = Geometry::get_closest_point_to_segment_2d(p_point,seg);
|
||||||
|
float d = p_point.distance_squared_to(closest);
|
||||||
|
|
||||||
float d = p_point.distance_squared_to(points[i].pos);
|
|
||||||
if (d<closest_dist) {
|
if (d<closest_dist) {
|
||||||
closest_dist=d;
|
closest_dist=d;
|
||||||
closest_idx=i;
|
closest_point=closest;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ERR_FAIL_COND_V(closest_dist==1e20,Vector2());
|
||||||
|
|
||||||
|
return closest_point;
|
||||||
}
|
}
|
||||||
|
|
||||||
ERR_FAIL_COND_V(closest_idx==-1,Vector2());
|
|
||||||
|
|
||||||
return points[closest_idx].pos;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
Vector<Vector2> PolygonPathFinder::get_intersections(const Vector2& p_from, const Vector2& p_to) const {
|
Vector<Vector2> PolygonPathFinder::get_intersections(const Vector2& p_from, const Vector2& p_to) const {
|
||||||
|
|
||||||
Vector<Vector2> inters;
|
Vector<Vector2> inters;
|
||||||
|
|
Loading…
Reference in a new issue