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

embedded/2024/10/25 16:24:35/

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

        //将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 };}

http://www.ppmy.cn/embedded/10378.html

相关文章

跳跃游戏 II (贪心, 动态规划)

题目描述(力扣45题) : 给定一个长度为 n 的 0 索引整数数组 nums。初始位置为 nums[0]。 每个元素 nums[i] 表示从索引 i 向前跳转的最大长度。换句话说&#xff0c;如果你在 nums[i] 处&#xff0c;你可以跳转到任意 nums[i j] 处: 0 < j < nums[i] i j < n 返回到…

如何基于香橙派AIpro对视频/图像数据进行预处理

背景介绍 受网络结构和训练方式等因素的影响&#xff0c;绝大多数神经网络模型对输入数据都有格式上的限制。在计算机视觉领域&#xff0c;这个限制大多体现在图像的尺寸、色域、归一化参数等。如果源图或视频的尺寸、格式等与网络模型的要求不一致时&#xff0c;我们需要对其…

量子城域网系列(七):移动终端量子加密赋能

之前的文章中我们讨论了量子密钥如何在网络协议中加密应用&#xff0c;但是在端侧&#xff0c;有大量的无线场景&#xff0c;比如手机、物联网设备等等&#xff0c;这些场景的保密需要也非常旺盛。此外&#xff0c;基于量子密钥分发的城域网络要实现信息传输安全闭环&#xff0…

临滴RK3588桌面版系统,命令行修改静态固定IP

修改文件位置&#xff1a; 打开并修改文件&#xff1a;vi Wired\ connection\ 2.nmconnection 修改IP: 修改相关信息后保存重启即可

常见的css面试题(持续更新,欢迎补充)

总结面试常问的css相关面试题~ 1. 什么情况下设置margin会造成margin塌陷? 怎么解决&#xff1f; 通常遇见margin塌陷&#xff0c;是我们同时给父子元素都设置的margin&#xff0c; 此时元素不会像我们想的那样撑开&#xff0c;而是选取最大margin去显示。 如何解决这个问题…

XUbuntu18.04 源码编译Qt4.5.3的过程

由于新公司很多旧的软件都是基于这个版本做的嵌入式开发。 所以想要自己搭一套基于Linux的非嵌入式开发环境&#xff0c;方便用来调试和编译代码。 这样就可以完成在linux下开发&#xff0c;然后直接嵌入式打包&#xff0c;涉及到界面的部分就不需要上机调试看问题了。 所以…

vue项目全局挂载函数 — webpack.ProvidePlugin

ProvidePlugin&#xff1a;&#xff08;官方文档解释&#xff09; 自动加载模块&#xff0c;而不必在任何地方 import 或 require 它们。 理解&#xff1a;在项目中&#xff0c;存在业务逻辑相同的功能&#xff0c;为了减少代码的书写&#xff0c;我们一般会选择抽离出复用的代…

Spring源码中的简单工厂模式

Spring 源码中广泛运用了各种设计模式,其中包括简单工厂模式。简单工厂模式在 Spring 中主要用于简化对象的创建过程,将对象的创建逻辑集中管理,从而使得客户端代码无需关心具体的对象创建细节,只需与工厂交互就能获取所需的对象实例。这种设计有助于提高代码的可读性、可维…