// // Created by huli on 2020/9/1. // #ifndef POINT2D_TOOL_H #define POINT2D_TOOL_H //#define OPEN_PCL_FLAG #ifdef OPEN_PCL_FLAG #include #include #include #include #endif #include #include class Point2D_tool { public: //极坐标 struct Polar_coordinates { float angle=0; //弧度 float distance=0; //距离 }; //极坐标的限定范围 struct Polar_coordinates_box { float angle_min=0; //角度最小值 float angle_max=0; //角度最大值 float distance_min=0; //距离最小值 float distance_max=0; //距离最大值 }; //平面坐标 struct Point2D { float x=0; //x轴 float y=0; //y轴 }; //平面坐标的限定范围 struct Point2D_box { float x_min=0; //x轴最小值 float x_max=0; //x轴最大值 float y_min=0; //y轴最小值 float y_max=0; //y轴最大值 }; //平面坐标的转换矩阵, 可以进行旋转和平移, 不能缩放 struct Point2D_transform { float m00=1; float m01=0; float m02=0; float m10=0; float m11=1; float m12=0; }; //极坐标 -> 平面坐标 static bool Polar_coordinates_to_point2D(Point2D_tool::Polar_coordinates* p_polar_coordinates, Point2D_tool::Point2D* p_point2D); //平面坐标 -> 极坐标 static bool Point2D_to_polar_coordinates(Point2D_tool::Point2D* p_point2D, Point2D_tool::Polar_coordinates* p_polar_coordinates); //判断极坐标点是否在限制范围 static bool limit_with_polar_coordinates_box(float distance, float angle, Point2D_tool::Polar_coordinates_box* p_polar_coordinates_box); //判断平面坐标点是否在限制范围 static bool limit_with_point2D_box(float x, float y, Point2D_tool::Point2D_box* p_point2D_box); #ifdef OPEN_PCL_FLAG //平面坐标的转换, 可以进行旋转和平移, 不能缩放 static bool transform_with_translation_rotation(float* p_x_in, float* p_y_in, float* p_x_out, float* p_y_out, Point2D_tool::Point2D_transform* p_point2D_transform); static bool transform_with_translation_rotation(pcl::PointXYZ* p_point3D_in, pcl::PointXYZ* p_point3D_out, Point2D_tool::Point2D_transform* p_point2D_transform); static bool transform_with_translation_rotation(pcl::PointCloud::Ptr p_cloud_in, pcl::PointCloud::Ptr p_cloud_out, Point2D_tool::Point2D_transform* p_point2D_transform); #endif }; #endif //POINT2D_TOOL_H