将 3D 平面上的点转换为 2D 点的程序
Program to convert points on 3D plane to 2D points
我有飞机的法向量。我想将 3D 点转换为保持它们之间相同距离的 2D 平面。基本上我想做的 是使平面上所有点的 z 坐标相等。
我如何着手实现这一目标并为其编写程序(最好是 C#)? .有没有我可以使用的好库。
这个库有用吗Point Cloud Library
我的objective这样做是我有几条 3D 线(在同一平面上)space,我想用 2D 表示这些线及其测量结果
我的问题的示例平面。
我正在为我正在使用 Google ARcore
统一开发的应用程序执行此操作
好的,我已经投入了大量时间来寻找解决此问题的方法。我想出了一个使用 ARcore 解决这个问题的简单方法,因为我正在使用 ARCore(Google 提供的增强现实 SDK)来解决这个问题。对于那些想在不使用 ARcore 的情况下实现此目的的人,请参考这些问题 ,其中必须创建新的正交基础或必须旋转平面以与默认平面对齐。
对于那些在 unity 中使用 ARcore 的人,我在 GitHub 上的 issue 中提供了一个更简单的解决方案。基本上我们可以很容易地在 3D 平面上创建新的轴,并从这个新创建的坐标系中记录坐标。
如果要在平面上投影 3d 点,则需要考虑 2d 坐标系。自然平面是由全局轴定义的平面,但它适用于一种平面(比如水平)而不适用于另一种平面(比如垂直)。
另一种坐标选择是由 CenterPose 定义的,但它可以改变每一帧。所以如果你只需要 1 帧的 2d 点,这可以写成:
x_local_axis = DetectedPlane.CenterPose.rotation * Vector3.forward;
z_local_axis = DetectedPlane.CenterPose.rotation * Vector3.right;
// loop over your points
x = Vector3.Dot(your_3d_point, x_local_axis);
z = Vector3.Dot(your_3d_point, z_local_axis);
如果您需要在帧之间保持一致的 2d 坐标系,您可能希望将锚点附加到任何感兴趣的平面,可能在 DetectedPlane.CenterPose,并进行与上面相同的数学计算,但是锚旋转而不是平面旋转。锚点的 x 轴和 z 轴将提供在帧之间保持一致的 2d 坐标框架。
所以这里在平面的中心创建了一个新的局部坐标轴,得到的点只有2个坐标。
我有飞机的法向量。我想将 3D 点转换为保持它们之间相同距离的 2D 平面。基本上我想做的 是使平面上所有点的 z 坐标相等。 我如何着手实现这一目标并为其编写程序(最好是 C#)? .有没有我可以使用的好库。 这个库有用吗Point Cloud Library
我的objective这样做是我有几条 3D 线(在同一平面上)space,我想用 2D 表示这些线及其测量结果
我的问题的示例平面。
我正在为我正在使用 Google ARcore
统一开发的应用程序执行此操作好的,我已经投入了大量时间来寻找解决此问题的方法。我想出了一个使用 ARcore 解决这个问题的简单方法,因为我正在使用 ARCore(Google 提供的增强现实 SDK)来解决这个问题。对于那些想在不使用 ARcore 的情况下实现此目的的人,请参考这些问题
对于那些在 unity 中使用 ARcore 的人,我在 GitHub 上的 issue 中提供了一个更简单的解决方案。基本上我们可以很容易地在 3D 平面上创建新的轴,并从这个新创建的坐标系中记录坐标。
如果要在平面上投影 3d 点,则需要考虑 2d 坐标系。自然平面是由全局轴定义的平面,但它适用于一种平面(比如水平)而不适用于另一种平面(比如垂直)。 另一种坐标选择是由 CenterPose 定义的,但它可以改变每一帧。所以如果你只需要 1 帧的 2d 点,这可以写成:
x_local_axis = DetectedPlane.CenterPose.rotation * Vector3.forward;
z_local_axis = DetectedPlane.CenterPose.rotation * Vector3.right;
// loop over your points
x = Vector3.Dot(your_3d_point, x_local_axis);
z = Vector3.Dot(your_3d_point, z_local_axis);
如果您需要在帧之间保持一致的 2d 坐标系,您可能希望将锚点附加到任何感兴趣的平面,可能在 DetectedPlane.CenterPose,并进行与上面相同的数学计算,但是锚旋转而不是平面旋转。锚点的 x 轴和 z 轴将提供在帧之间保持一致的 2d 坐标框架。
所以这里在平面的中心创建了一个新的局部坐标轴,得到的点只有2个坐标。