25 double line_length_sq = diff.
length2();
28 if ((p1.x == 0 && p1.y == 0) || (p2.
x == 0 && p2.
y == 0) || line_length_sq == 0)
36 double t = p1.dot(diff) / -line_length_sq;
41 distance_sq = p1.length2();
45 distance_sq = (p1 +
t * diff).length2();
57 int i_min = std::min<int>(i_p1, i_p2);
58 int i_max = std::max<int>(i_p1, i_p2);
66 uint i_min1, i_max1, i_min2, i_max2;
78 i_min1 =
static_cast<uint
>(std::max<int>(0, i_min));
79 i_max1 = std::min<uint>(
lrf_->
num_beams_,
static_cast<uint
>(std::max<int>(0, i_max)));
95 i_min1 =
static_cast<uint
>(std::max<int>(0, i_max));
99 i_max2 = std::min<uint>(
lrf_->
num_beams_,
static_cast<uint
>(std::max<int>(0, i_min)));
113 for(uint i = i_min1; i < i_max1; ++i)
116 double d = p1.cross(s) / r.
cross(s);
122 for(uint i = i_min2; i < i_max2; ++i)
125 double d = p1.cross(s) / r.
cross(s);
135 if (ranges[i] == 0 || d < ranges[i]) {
158 if (std::abs(pose.
getOrigin().getZ()) > max_radius)
161 double dist_sq = pose.
getOrigin().length2();
163 if (dist_sq > max_radius * max_radius) {
176 double z_offset = pose.
getOrigin().getZ();
177 for(uint i = 0; i < points.
size(); ++i)
178 zs_t[i] = Rz.
dot(points[i]) + z_offset;
186 double z1 = zs_t[it_tri->i1_];
187 double z2 = zs_t[it_tri->i2_];
188 double z3 = zs_t[it_tri->i3_];
190 bool p1_under_plane = z1 < 0;
191 bool p2_under_plane = z2 < 0;
192 bool p3_under_plane = z3 < 0;
195 if (p1_under_plane != p2_under_plane || p2_under_plane != p3_under_plane)
198 Vec2 p1_3d(Rx.
dot(points[it_tri->i1_]) + pose.
t.x, Ry.
dot(points[it_tri->i1_]) + pose.
t.y);
199 Vec2 p2_3d(Rx.
dot(points[it_tri->i2_]) + pose.
t.x, Ry.
dot(points[it_tri->i2_]) + pose.
t.y);
200 Vec2 p3_3d(Rx.
dot(points[it_tri->i3_]) + pose.
t.x, Ry.
dot(points[it_tri->i3_]) + pose.
t.y);
203 double z1_abs = std::abs(z1);
204 double z2_abs = std::abs(z2);
205 double z3_abs = std::abs(z3);
212 if (p2_under_plane == p3_under_plane) {
215 q2 = (p1_3d * z2_abs + p2_3d * z1_abs) / (z1_abs + z2_abs);
216 q1 = (p1_3d * z3_abs + p3_3d * z1_abs) / (z1_abs + z3_abs);
220 q1 = (p1_3d * z2_abs + p2_3d * z1_abs) / (z1_abs + z2_abs);
221 q2 = (p1_3d * z3_abs + p3_3d * z1_abs) / (z1_abs + z3_abs);
223 }
else if (p1_under_plane == p3_under_plane) {
226 q1 = (p2_3d * z1_abs + p1_3d * z2_abs) / (z2_abs + z1_abs);
227 q2 = (p2_3d * z3_abs + p3_3d * z2_abs) / (z2_abs + z3_abs);
231 q1 = (p2_3d * z3_abs + p3_3d * z2_abs) / (z2_abs + z3_abs);
232 q2 = (p2_3d * z1_abs + p1_3d * z2_abs) / (z2_abs + z1_abs);
236 if (p1_under_plane == p2_under_plane) {
239 q1 = (p3_3d * z2_abs + p2_3d * z3_abs) / (z3_abs + z2_abs);
240 q2 = (p3_3d * z1_abs + p1_3d * z3_abs) / (z3_abs + z1_abs);
244 q1 = (p3_3d * z1_abs + p1_3d * z3_abs) / (z3_abs + z1_abs);
245 q2 = (p3_3d * z2_abs + p2_3d * z3_abs) / (z3_abs + z2_abs);