point2D_tool.h 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. //
  2. // Created by huli on 2020/9/1.
  3. //
  4. #ifndef NNXX_TESTS_POINT2D_H
  5. #define NNXX_TESTS_POINT2D_H
  6. #include <pcl/point_types.h>
  7. #include <pcl/PCLPointCloud2.h>
  8. #include <pcl/conversions.h>
  9. #include <pcl/common/common.h>
  10. class Point2D_tool
  11. {
  12. public:
  13. //极坐标
  14. struct Polar_coordinates
  15. {
  16. float angle=0; //弧度
  17. float distance=0; //距离
  18. };
  19. //极坐标的限定范围
  20. struct Polar_coordinates_box
  21. {
  22. float angle_min=0; //角度最小值
  23. float angle_max=0; //角度最大值
  24. float distance_min=0; //距离最小值
  25. float distance_max=0; //距离最大值
  26. };
  27. //平面坐标
  28. struct Point2D
  29. {
  30. float x=0; //x轴
  31. float y=0; //y轴
  32. };
  33. //平面坐标的限定范围
  34. struct Point2D_box
  35. {
  36. float x_min=0; //x轴最小值
  37. float x_max=0; //x轴最大值
  38. float y_min=0; //y轴最小值
  39. float y_max=0; //y轴最大值
  40. };
  41. //平面坐标的转换矩阵, 可以进行旋转和平移, 不能缩放
  42. struct Point2D_transform
  43. {
  44. float m00=1;
  45. float m01=0;
  46. float m02=0;
  47. float m10=0;
  48. float m11=1;
  49. float m12=0;
  50. };
  51. //极坐标 -> 平面坐标
  52. static bool Polar_coordinates_to_point2D(Point2D_tool::Polar_coordinates* p_polar_coordinates, Point2D_tool::Point2D* p_point2D);
  53. //平面坐标 -> 极坐标
  54. static bool Point2D_to_polar_coordinates(Point2D_tool::Point2D* p_point2D, Point2D_tool::Polar_coordinates* p_polar_coordinates);
  55. //判断极坐标点是否在限制范围
  56. static bool limit_with_polar_coordinates_box(float distance, float angle, Point2D_tool::Polar_coordinates_box* p_polar_coordinates_box);
  57. //判断平面坐标点是否在限制范围
  58. static bool limit_with_point2D_box(float x, float y, Point2D_tool::Point2D_box* p_point2D_box);
  59. //平面坐标的转换, 可以进行旋转和平移, 不能缩放
  60. static bool transform_with_translation_rotation(float* p_x_in, float* p_y_in, float* p_x_out, float* p_y_out,
  61. Point2D_tool::Point2D_transform* p_point2D_transform);
  62. static bool transform_with_translation_rotation(pcl::PointXYZ* p_point3D_in, pcl::PointXYZ* p_point3D_out,
  63. Point2D_tool::Point2D_transform* p_point2D_transform);
  64. static bool transform_with_translation_rotation(pcl::PointCloud<pcl::PointXYZ>::Ptr p_cloud_in,
  65. pcl::PointCloud<pcl::PointXYZ>::Ptr p_cloud_out,
  66. Point2D_tool::Point2D_transform* p_point2D_transform);
  67. };
  68. #endif //NNXX_TESTS_POINT2D_H