/** Check if the edge intersects with another line segment. * @param x1 X coordinate of first point of line segment to test * @param y1 Y coordinate of first point of line segment to test * @param x2 X coordinate of first point of line segment to test * @param y2 Y coordinate of first point of line segment to test * @param ip upon returning true contains intersection point, * not modified is return value is false * @return true if the edge intersects with the line segment, false otherwise */ bool NavGraphEdge::intersection(float x1, float y1, float x2, float y2, fawkes::cart_coord_2d_t &ip) const { const Eigen::Vector2f e_from(from_node_.x(), from_node_.y()); const Eigen::Vector2f e_to(to_node_.x(), to_node_.y()); const Eigen::Vector2f p1(x1, y1); const Eigen::Vector2f p2(x2, y2); const Eigen::Vector2f lip = line_segm_intersection(e_from, e_to, p1, p2); #if EIGEN_VERSION_AT_LEAST(3,2,0) if (lip.allFinite()) { #else if (workaround::allFinite(lip)) { #endif ip.x = lip[0]; ip.y = lip[1]; return true; } else { return false; } } /** Check if the edge intersects with another line segment. * @param x1 X coordinate of first point of line segment to test * @param y1 Y coordinate of first point of line segment to test * @param x2 X coordinate of first point of line segment to test * @param y2 Y coordinate of first point of line segment to test * @return true if the edge intersects with the line segment, false otherwise */ bool NavGraphEdge::intersects(float x1, float y1, float x2, float y2) const { const Eigen::Vector2f e_from(from_node_.x(), from_node_.y()); const Eigen::Vector2f e_to(to_node_.x(), to_node_.y()); const Eigen::Vector2f p1(x1, y1); const Eigen::Vector2f p2(x2, y2); return line_segm_intersect(e_from, e_to, p1, p2); } } // end of namespace fawkes