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 };
        }
相关推荐
千鼎数字孪生-可视化1 小时前
3D模型给可视化大屏带来了哪些创新,都涉及到哪些技术栈。
ui·3d·信息可视化·数据分析
huoyingcg1 天前
3D Mapping秀制作:沉浸式光影盛宴 3D mapping show
科技·3d·动画·虚拟现实
luoganttcc2 天前
FastPillars:一种易于部署的基于支柱的 3D 探测器
3d
工业3D_大熊2 天前
3D Web轻量化引擎HOOPS Communicator在装配件管理上的具体优势
3d·3d web轻量化·3d渲染·3d模型可视化·工业3d·web端3d可视化·3d复杂模型轻量化
在下胡三汉2 天前
3dmax批量转glb/gltf/fbx/osgb/stl/3ds/dae/obj/skp格式导出转换插件,无需一个个打开max,材质贴图在
3d·材质·贴图
xhload3d2 天前
智能网联汽车云控平台 | 图扑数字孪生
3d·gis·智慧城市·html5·webgl·数字孪生·可视化·工业互联网·车联网·智慧交通·智能网联·汽车云控
木木黄木木2 天前
使用HTML5和CSS3实现炫酷的3D立方体动画
3d·css3·html5
lb29172 天前
CSS 3D变换,transform:translateZ()
前端·css·3d
淮北4942 天前
ros调试工具foxglove使用指南三:在3d空间写写画画(Panel->3D ->Scene entity)
python·学习·3d·机器人
大有数据可视化3 天前
为什么可视化大屏越来越多应用3D元素呢?
3d