繁体   English   中英

相对于平面舍入3D点

[英]Rounding a 3D point relative to a plane

我有一个Plane类,其中n代表法线, q代表平面上的一个点。 我还有另一个点p也在那架飞机上。 如何将p舍入到该平面上最近的单位。 就像将光标捕捉到3D网格,但网格可以旋转平面。

图片解释: 在此输入图像描述

红色是当前的观点。 绿色是我想要获得的圆点。

实现这一目标的最简单方法可能是通过采用平面来定义旋转和移动的坐标系。 这允许您构造矩阵,以将全局坐标中的点转换为平面坐标并返回。 完成后,您可以简单地将点转换为平面坐标,以平凡的方式执行舍入/投影,然后转换回世界坐标。

当然,这个问题没有说明你提出问题的方式:你需要的变换有六个自由度,你的平面方程只产生三个约束。 因此,您需要添加更多信息:原点在平面内的位置,以及网格围绕平面法线的旋转。

就个人而言,我首先要以参数形式推导出一个平面描述:

xVec = alpha*direction1 + beta*direction2 + x0

当然,这样的描述包含九个变量(三个向量),但是您可以对两个方向向量进行归一化,并且可以将两个方向向量约束为正交,这将自由量减少到六个。

两个归一化方向向量与归一化法线一起是旋转坐标系的基本向量,因此您可以通过将这三个向量放在一起来简单地构造旋转矩阵。 要获得反向旋转,只需转置生成的矩阵。 在旋转的适当侧添加平移/反向平移,您就完成了。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM