129 {
130 const CellPositionType &
pos = from.position;
131 const CellPositionType &forward_dir = from.incoming_dir;
132 std::vector<CellPositionType> dirs_to_check{};
133
134 if (
abs(forward_dir.x()) +
abs(forward_dir.y()) == 0) {
136 }
else if (
abs(forward_dir.x()) +
abs(forward_dir.y()) == 2) {
137
138 CellPositionType horizontal_check_dir = CellPositionType{forward_dir.x(), 0};
139 CellPositionType vertical_check_dir = CellPositionType{0, forward_dir.y()};
140
141 if (!
is_passable(pos - horizontal_check_dir) &&
is_passable(pos + forward_dir - 2 * horizontal_check_dir)) {
142 dirs_to_check.push_back(forward_dir - 2 * horizontal_check_dir);
143 }
144
146 dirs_to_check.push_back(forward_dir - 2 * vertical_check_dir);
147 }
148
149 dirs_to_check.push_back(horizontal_check_dir);
150 dirs_to_check.push_back(vertical_check_dir);
151 dirs_to_check.push_back(forward_dir);
152
153 } else {
154 CellPositionType side_dir = CellPositionType(forward_dir.y(), forward_dir.x());
155
157 dirs_to_check.push_back(forward_dir + side_dir);
158 }
159
161 dirs_to_check.push_back(forward_dir - side_dir);
162 }
163 dirs_to_check.push_back(forward_dir);
164 }
165
166 for (const CellPositionType &dir : dirs_to_check) {
168 if (jp != pos) fn(Node{jp, dir});
169 }
170 }
const std::vector< CellPositionType > all_directions
Definition JumpPointSearch.cpp:181
CellPositionType find_jump_point(CellPositionType start, CellPositionType forward_dir) const
Definition JumpPointSearch.cpp:88
EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC half abs(const half &a)
Definition Half.h:445
Vec3d pos(const Pt &p)
Definition ReprojectPointsOnMesh.hpp:14