#pragma once #include "types.h" namespace oh_my_loam { template inline double DistanceSqure(const PointT& pt) { return pt.x * pt.x + pt.y * pt.y + pt.z * pt.z; } template inline double Distance(const PointT& pt) { return std::sqrt(pt.x * pt.x + pt.y * pt.y + pt.z * pt.z); } template inline double IsFinite(const PointT& pt) { return std::isfinite(pt.x) && std::isfinite(pt.y) && std::isfinite(pt.z); } // normalize an angle to [-pi, pi) inline double NormalizeAngle(double ang) { const double& two_pi = 2 * M_PI; return ang - two_pi * std::floor((ang + M_PI) / two_pi); } template void DrawPointCloud(const pcl::PointCloud& cloud, const Color& color, const std::string& id, PCLVisualizer* const viewer, int pt_size = 3) { PCLColorHandlerCustom color_handler(cloud.makeShared(), color.r, color.g, color.b); viewer->addPointCloud(cloud.makeShared(), color_handler, id); viewer->setPointCloudRenderingProperties( pcl::visualization::PCL_VISUALIZER_POINT_SIZE, pt_size, id); } template void DrawPointCloud(const pcl::PointCloud& cloud, const std::string& field, const std::string& id, PCLVisualizer* const viewer, int pt_size = 3) { PCLColorHandlerGenericField color_handler(cloud.makeShared(), field); viewer->addPointCloud(cloud.makeShared(), color_handler, id); viewer->setPointCloudRenderingProperties( pcl::visualization::PCL_VISUALIZER_POINT_SIZE, pt_size, id); } } // namespace oh_my_loam