#include <CGAL/Exact_predicates_inexact_constructions_kernel.h>
typedef CGAL::Exact_predicates_inexact_constructions_kernel Kernel;
// 返回角度值
double angle_between_vectors(const Kernel::Vector_3& v1, const Kernel::Vector_3& v2)
{
double dot_product = v1 * v2;
double magnitude_v1 = std::sqrt(v1.squared_length());
double magnitude_v2 = std::sqrt(v2.squared_length());
double cos_angle = dot_product / (magnitude_v1 * magnitude_v2);
// 确保cos_angle在[-1, 1]范围内,避免浮点数误差
cos_angle = std::max(-1.0, std::min(1.0, cos_angle));
return std::acos(cos_angle) / 3.1415926535 * 180.0; // 返回角度
}
class Coord2DTransformer
{
typedef Kernel::Point_3 Point;
typedef Kernel::Vector_3 Vector;
typedef Kernel::Plane_3 Plane;
public:
void SetData(std::vector<Point>& input)
{
// fit_plane参见博客《CGAL散乱点拟合最小二乘平面(3D平面拟合,基于Eigen)》
// https://blog.csd
三维平面点云与二维坐标点之间的转换(投影法)
于 2024-10-08 16:34:02 首次发布