85 if (dist1 * dist2 > 0)
88 float lambda = dist2 / (dist2 - dist1);
92 intersection.x = (point1.x - point2.x) * lambda + point2.x;
93 intersection.y = (point1.y - point2.y) * lambda + point2.y;
94 intersection.z = (point1.z - point2.z) * lambda + point2.z;
98 point2 = intersection;
100 point1 = intersection;
111 clipped_polygon.clear ();
112 clipped_polygon.reserve (polygon.size ());
115 if (polygon.size () < 3)
117 if (polygon.size () == 1)
121 clipped_polygon.push_back (polygon [0]);
123 else if (polygon.size () == 2)
125 clipped_polygon.push_back (polygon [0]);
126 clipped_polygon.push_back (polygon [1]);
128 clipped_polygon.clear ();
133 float previous_distance =
getDistance (polygon [0]);
135 if (previous_distance > 0)
136 clipped_polygon.push_back (polygon [0]);
138 typename std::vector<PointT, Eigen::aligned_allocator<PointT> >::const_iterator prev_it = polygon.begin ();
140 for (
typename std::vector<PointT, Eigen::aligned_allocator<PointT> >::const_iterator pIt = prev_it + 1; pIt != polygon.end (); prev_it = pIt++)
144 if (distance * previous_distance < 0)
146 float lambda = distance / (distance - previous_distance);
149 intersection.x = (prev_it->x - pIt->x) * lambda + pIt->x;
150 intersection.y = (prev_it->y - pIt->y) * lambda + pIt->y;
151 intersection.z = (prev_it->z - pIt->z) * lambda + pIt->z;
153 clipped_polygon.push_back (intersection);
156 clipped_polygon.push_back (*pIt);
158 previous_distance = distance;