3d世界坐标转换到某个二维平面。

有个功能需要截取某个平面的点云数据,然后计算宽高。需要将3d点投影到二维平面上。

csharp 复制代码
        //将3d坐标点转换为2d
        /**
         * 法向量(A, B, C)
         * 常量D
         * 原点x0,y0,z0
         * 方向向量(vx, vy, vz)
         * 投影点(x,y,z)
         * 
public static double[] Convert3DPointTo2D(
            double A, double B, double C, double D,
            double x0, double y0, double z0,
            double vx, double vy, double vz,
            double x, double y, double z)
        {
            // 首先,找到平面P上的两个正交向量
            // 我们可以使用平面的法向量(A, B, C)和L1的方向向量(vx, vy, vz)的叉积来找到平面上的一个向量
            double ux = B * vz - C * vy;
            double uy = C * vx - A * vz;
            double uz = A * vy - B * vx;

            // 规范化这个向量得到U(我们2D坐标系统中的x轴)
            double lengthU = Math.Sqrt(ux * ux + uy * uy + uz * uz);
            ux /= lengthU;
            uy /= lengthU;
            uz /= lengthU;

            // 要找到第二个向量,我们可以取U和平面的法向量的叉积
            double vx2 = uy * C - uz * B;
            double vy2 = uz * A - ux * C;
            double vz2 = ux * B - uy * A;

            // 规范化这个向量得到V(我们2D坐标系统中的y轴)
            double lengthV = Math.Sqrt(vx2 * vx2 + vy2 * vy2 + vz2 * vz2);
            vx2 /= lengthV;
            vy2 /= lengthV;
            vz2 /= lengthV;




            // 现在,我们可以将点(x, y, z)投影到平面上,并计算其在2D系统中的坐标
            // 计算点到平面的投影
            double t = -(A * x + B * y + C * z + D) / (A * A + B * B + C * C);
            double xp = x + A * t;
            double yp = y + B * t;
            double zp = z + C * t;

            // 计算投影点在平面坐标系统中的2D坐标(u, v)
            double u = (xp - x0) * ux + (yp - y0) * uy + (zp - z0) * uz;
            double v = (xp - x0) * vx2 + (yp - y0) * vy2 + (zp - z0) * vz2;
            return new double[] { u, v };
        }
相关推荐
草莓奶忻11 小时前
Eigen 几何模块深拆:Isometry3d vs Affine3d + 变换矩阵本质详解
3d
Casia_Dominic11 小时前
【三维重建工具】NeRFStudio、3D GaussianSplatting、Colmap安装与使用指南
git·3d·github·点云
threelab11 小时前
threejs案例开发-中国3D国旗动画
3d
真的不想学习啦11 小时前
3D Surface Reconstruction with Enhanced High-Frequency Details
人工智能·3d
咔咔一顿操作21 小时前
Cesium实战:交互式多边形绘制与编辑功能完全指南(最终修复版)
前端·javascript·3d·vue
ykjhr_3d1 天前
3D 演示动画在汽车培训与教育领域中的应用
3d·汽车
三月的一天1 天前
React Three Fiber 实现 3D 模型点击高亮交互的核心技巧
3d·webgl·threejs·reactthreefiber
云空2 天前
《PyQt6-3D应用开发技术文档》
3d·pyqt
鹧鸪云光伏2 天前
光伏无人机3D建模:毫秒级精度设计
3d·无人机
杀生丸学AI2 天前
【三维生成】FlashDreamer:基于扩散模型的单目图像到3D场景
人工智能·3d·大模型·aigc·蒸馏与迁移学习·扩散模型与生成模型