C++ 我的平面不垂直,如何更新点云的坐标使其位于垂直平面上

C++ 我的平面不垂直,如何更新点云的坐标使其位于垂直平面上,c++,3d,rotation,axis,C++,3d,Rotation,Axis,我有一堆点在垂直面上。实际上这架飞机 应该完全垂直。但是,当我可视化点云时,有一个 与垂直度的轻微倾斜(接近2度)。目前,我可以计算 只有这种倾向。关于其他错误,我假设没有 换班之类的 所以,我想更新点数据的坐标,使它们位于垂直平面上。我想,我应该做些改变。它可能仅通过沿X轴旋转实现。不知道会是什么 我想你明白我的问题了。老实说,我不擅长 数学。所以,请让我知道如何更新我的点坐标 躺在完全垂直的平面上 注意:我在C++中实现这一点,而且有很多程序员对这些事情有很好的了解,我在C++下发布这个问题

我有一堆点在垂直面上。实际上这架飞机 应该完全垂直。但是,当我可视化点云时,有一个 与垂直度的轻微倾斜(接近2度)。目前,我可以计算 只有这种倾向。关于其他错误,我假设没有 换班之类的

所以,我想更新点数据的坐标,使它们位于垂直平面上。我想,我应该做些改变。它可能仅通过沿X轴旋转实现。不知道会是什么

我想你明白我的问题了。老实说,我不擅长 数学。所以,请让我知道如何更新我的点坐标 躺在完全垂直的平面上

注意:我在C++中实现这一点,而且有很多程序员对这些事情有很好的了解,我在C++下发布这个问题。 更新

如果我确切地说我到目前为止做了什么; 我有点云数据表示一个垂直的物体+它周围的东西。(数据由移动的扫描仪收集,可能与正确的世界轴存在轴偏差)。问题是,我不能确切地说我的数据是否有错误。因此,我用一个垂直平面对象(在我的数据中也是主要对象)对此进行了检查。实际上,这个平面是垂直的。但是,当我通过去除异常值来拟合一个平面时,那个平面并不是真正垂直的,并且有近2度的倾斜。因此,我怀疑我的数据有错误。所以我想更新我的所有点云(包括平面上的点和代表其他对象的点),以便将特定的平面点精确地放置在垂直平面上。然后,我想,所有的点都会更新到它们在现实中的正确位置。也就是说,所有(x,y,z)坐标都应该更新

作为示例,请参考下图。

左边表示原始点云(正如你们所看到的,点本身并不是垂直的),后面的线表示我拟合的垂直面,红色是天顶线。如你所见,垂直面有一个倾斜度。
所以,我想更新右图中的所有数据。然后,在更新后,如果我再次拟合一个平面(去除异常值),那么它正好平行于天顶线。请帮帮我。

考虑到我最近在飞机公司工作,我也许能帮你。首先,为什么这些点从一开始就不是共面的?首先,我会让这些点共面,而不是倾斜(从哪个原点开始?),然后再修复它们。此外,在第一次尝试时使点共面将提高效率


很抱歉,如果这是您不想要的答案,但我需要更多信息才能帮助您。此外,3D数学也很难。如果你用得够多,它就会开始冲击你的大脑,你永远不会忘记它,尤其是当你经历了我不得不经历的头痛时。

考虑到我最近与飞机一起工作,我也许能帮助你。首先,为什么这些点从一开始就不是共面的?首先,我会让这些点共面,而不是倾斜(从哪个原点开始?),然后再修复它们。此外,在第一次尝试时使点共面将提高效率


很抱歉,如果这是您不想要的答案,但我需要更多信息才能帮助您。此外,3D数学也很难。如果你用得够多,它就会开始撞击你的脑袋,你永远不会忘记它,特别是当你经历了我不得不经历的头痛时。

我对它做了一些思考,因为你想沿着x轴旋转,你的旋转将在xz平面上完成,这意味着我们可以把这变成一个2D问题。在对维基百科做了一些研究之后,这可能是你的解决方案

new z = ((x - intended x) * sin(angle)) + (z * cos(angle)) + intended x

我在这里做的是从我们当前的x值中减去我们预期的x值,这样我们就可以使(预期的x,0)我们的原点旋转。旋转点后,我将(预期的x,0)添加回坐标,以便得到正确的结果。

我对此做了一些思考,因为您希望沿x轴旋转,所以您的旋转将在xz平面上完成,这意味着我们可以将其设为二维问题。在对维基百科做了一些研究之后,这可能是你的解决方案

new z = ((x - intended x) * sin(angle)) + (z * cos(angle)) + intended x

我在这里做的是从我们当前的x值中减去我们预期的x值,这样我们就可以使(预期的x,0)我们的原点旋转。旋转点后,我将(预期的x,0)添加回坐标,以便得到正确的结果。

根据点的来源(我猜是某种测量)以及您想对它们执行的操作,您可以对数据执行几种不同的操作

搜索关键字“回归平面”可能会有所帮助-有几种方法可以找到近似点云的平面,也有几种方法可以将点“捕捉”到平面

编辑:要围绕回归平面上的法向量与所需平面的法向量的叉积以及所选点定义的轴应用旋转。从您的示例中,我认为您可能希望垂直平面对象的底部成为旋转的参考点

所以你已经得到了你的参考点,你现在要旋转的轴,和角度。您需要做的只是:

  • 翻译(达到你的参考点)
  • 轮换

  • 根据你从哪里得到你的点(我猜是某种测量)以及你想用它们做什么,你可以用你的数据做一些不同的事情

    搜索关键字“回归平面”