当前位置: 首页 > 面试题库 >

从法线向量给定的平面到XY平面的映射坐标

呼延聪
2023-03-14
问题内容

因此,我有此算法来计算法线向量给定的3D形状的横截面。

但是,我当前的问题是,该横截面是一组3D点(都位于给定平面上),并且要显示该剖面,我需要将此坐标映射到XY平面。

如果平面法线是(0,0,c)之类的东西,这将是完美的-我只是复制x和y坐标而放弃z。

这是我的问题:由于我不知道如何转换其他平原,有人可以给我任何有关我现在应该做什么的提示吗?


问题答案:

您的窗格由法线矢量定义

n=(xn,yn,zn)

为了进行协调转换,我们需要2个基本向量和一个零点的窗格

基本向量

我们选择了那些“自然”适合x / y窗格的样式(有关边缘情况,请参阅下文):

b1=(1,0,zb1)
b2=(0,1,zb2)

我们想要

b1 x b2 = n*c (c const标量)

确保这两个是真正的基础

现在解决这个问题:

b1 x b2= (0*zb2-zb1*1,zb1*0-1*zb2,1*1-0*0) = (zb1,zb2,1)
zb1*c=xn
zb2*c=yn
1*c=zn

c=zn,
zb2=yn/c=yn/zn
zb1=xn/c=xn/zn

b1=(1,0,yn/zn)
b2=(0,1,xn/zn)

并将其标准化

bv1=(1,0,yn/zn)*sqrt(1+(yn/zn*yn/zn))
bv2=(0,1,yn/zn)*sqrt(1+(xn/zn*xn/zn))

边缘情况是,当zn = 0时:在这种情况下,法线向量与x /
y窗格平行,并且不存在自然的基本向量,因此,您必须通过美观的POV选择基本的b1和b2向量并通过相同的解决方案过程,或者只是选择了bv1和bv2。

零点

您在OQ中没有提到窗格的锚点,但是有必要将窗格与无限个并行窗格族区分开来。

如果锚点为(0,0,0),则这是坐标转换的理想锚点,并且窗格具有

x*xn+y*yn+z*zn=0,
(y0,y0,z0)=(0,0,0)

如果没有,我假设您的锚点为(xa,ya,za),并且窗格具有

x*xn+y*yn+z*zn=d

与d const标量。自然的拟合将是窗格的点,它是由原始零点在窗格上的法线投影定义的:

P0=(x0,y0,z0)

(x0, y0, z0) = c * (xn,yn,zn)

解决这个问题

x*xn+y*yn+z*zn=d

c*xn*xn+c*yn*yn+c*zn*zn=d

c=d/(xn*xn+yn*yn+zn*zn)

从而

P0=(x0,y0,z0)=c*(xn,yn,zn)

被发现。

最终转型

通过将窗格的每个点(即要显示的那些点)表示为

P0+x'*bv1+y'*bv2

其中x’和y’为新坐标。既然我们知道P0,bv1和bv2,这是微不足道的。如果不是边缘情况,则bv1.y和bv2.x中的值为零,从而进一步减少了问题。

x’和y’是您想要的新坐标。



 类似资料:
  • 我有一个包含240个项目的列表,使用完整发送此列表需要1个多小时。 所以我跟着这篇文章同时发送,以尽量减少响应时间,但是里面的代码永远不会执行:

  • 我对webflux比较陌生,我想找到解决方案,在有条件时避免嵌套flatMap: 如何防止这种分支条件平面映射混乱?我无法想象如果我在项目中有另一个实体。会有更多嵌套的平面地图?

  • 假设我有这样的代码: 输出是相同的线程名称,所以这里没有的好处--我的意思是有一个线程来完成所有的工作。 在内部有以下代码: 我理解强制属性如果“outer”流将是并行的(它们可能会阻塞),“outer”将不得不等待“flatmap”完成,反过来(因为使用了相同的公共池),但为什么总是强制这样做呢? 这是一个可以在以后的版本中改变的东西吗?

  • 机械卷算法,写面经攒人品,视觉算法工程师 一面(8月3日,50分钟) 1、项目介绍 2、智能指针用过吗,介绍 3、拷贝构造函数和移动构造函数的区别 4、Ransac会吗,介绍 5、写代码,实现Ransac 二面(8月3日,45分钟) 1、项目介绍 2、做题,两数之和 3、智能指针和普通指针区别等C++知识 4、PnP位姿估计需要几对点对 5、一个项目相关问题 三面主管面(8月17日,45分钟) 太

  • 如果我执行以下“连接”两个流的代码 < li >首先通过平面映射< code >流 我在两种情况下都获得了相同的正确结果,但过滤操作的次数不同。 我在两种情况下都得到了预期的结果(3)。但是,第一个操作对集合的每个元素应用第一个过滤器,而第二个操作在遇到一个过滤器时就停止。输出是: 为什么两者之间的行为有所不同?JDK代码在第一个场景中是否可以改进为与第二个场景中一样高效,或者是否有一些东西使其不

  • 时间:2024.3.25(一面) 部门:地平线C++开发(RunTime方向) # 一、项目 1.讲一下项目的整个工作流程(服务端和客户端) 2.怎么用的protobuf协议,是自己重写编码和解码吗 3.高效异步日志怎么做的 4.为什么要有线程池 5.介绍一下第一个算法,用的什么框架 # 二、八股 1.交叉编译 2.C++程序的整个编译过程 3.智能指针 4.常用命令及相关工具的使用 5.sort

  • 一面8.29 项目介绍,项目的难点,怎么解决的,以及项目中的一些技术问题,是否涉及音视频渲染,做的二维还是三维的,介绍一个深度学习的比赛,遇到的困难,怎么解决的,你负责那些工作,至此约二十多分钟 介绍下QT的信号和槽,信号和槽的优缺点,答松耦合,追问松耦合的体现形式,继续追问如果让你实现信号和槽你会怎么实现,答哈希表,追问如果使用哈希表会出现什么问题 问C++多态,追问多态在软件框架中的好处,继续

  • 地平线 算法 一面 50分钟左右 1.项目 2.从项目延申提到,如果是海量数据里,你如何提取困难样本,里面有噪声,如何验证呢,不能使用模型训练 3.讲讲图像分割最新做法有哪些,有哪些优化 4.我自己提到了对比学习,具体问了对比学习的东西 5.手撕:岛屿类问题,矩阵是由0和255组成的 给每一块岛屿标号返回标了号的岛屿 已感谢 #地平线#