c++ - 在给定平面上创建 XYZ 位置的数据集

标签 c++ 3d geometry computational-geometry linear-algebra

我需要创建一个 XYZ 位置列表,给定起点和基于平面的位置之间的偏移量。在平面上这很容易。假设我需要的偏移量是从位置 0,0,0 向下移动 3 然后向右移动 2

输出将是:

0,0,0 (starting position)
0,-3,0 (move down 3)
2,-3,0 (then move right 2)

同样适用于不同的起始位置,比方说 5,5,1:

5,5,1 (starting position)
5,2,1 (move down 3)
7,2,1 (then move right 2)

当飞机不再位于这个平面网格上时,问题就来了。

我能够计算平面方程和给定 3 个点的法 vector 。 但是现在我该怎么做才能根据这个等式创建这个 XYZ 位置数据集?

我知道我可以在给定两个值的情况下求解 XYZ。假设我知道 x=1 和 y=1,我可以求解 Z。但是向下移动 2 不再只是 y-2。我相信我需要在 x 和 y 轴上找到一个线性方程来增加位置并平行于这个新平面的 x 和 y 移动,然后只求解 Z。我不确定如何完成这个。

另一个问题是我需要计算这个平面相对于基平面的角度、倾斜度和旋转度。

例如:

P1=0,0,0 and P2=1,1,0 the tilt=0deg angle=0deg rotation=45deg.
P1=0,0,0 and P2=0,1,1 the tilt=0deg angle=45deg rotation=0deg.
P1=0,0,0 and P2=1,0,1 the tilt=45deg angle=0deg rotation=0deg.
P1=0,0,0 and P2=1,1,1 the tilt=0deg angle=45deg rotation=45deg.

我已经在这两个问题上搜索了几个小时,但总是在平面方程式上停下来。正确操纵 x,y 以平行于平面,然后利用该信息找到这些角度。这是很多需要解决的几何问题,我找不到任何关于如何计算这个点列表的更多信息,更不用说计算与基平面的 3 个角度了。

我会在此方面提供任何帮助或见解。只需简单的旧数学或对 C++ 的引用就可以完美地阐明我在这里面临的这个问题。

谢谢, 马特

最佳答案

你可以认为你的平面是由一个点和一对 orthonormal basis 定义的。 vector (这只是意味着两个长度为 1 的 vector ,彼此成 90 度)。您最基本的平面可以定义为:

p0 = (0, 0, 0) #Origin point
vx = (1, 0, 0) #X basis vector
vy = (0, 1, 0) #Y basis vector

要找到在 X 方向上偏移 dx 并在 Y 方向上偏移 dy 的点 p1,您可以使用以下公式:

p1 = p0 + dx * vx + dy * vy

如果您的偏移量沿着给定的轴(听起来确实如此),则此公式将始终有效。如果 vector 已经旋转,这仍然是正确的 - 这就是您将要使用的属性。

所以要找到一个沿旋转平面偏移的点:

  1. 采用默认基 vector (vxvy,上文)。
  2. 旋转它们直到它们定义了您想要的平面(您可能需要也可能不需要旋转原点,具体取决于问题的定义方式)。
  3. 应用公式,得到你的答案。

现在进行轮换时会出现一些问题(顺序很重要!),但这是基本思想,应该足以让您走上正轨。祝你好运!

关于c++ - 在给定平面上创建 XYZ 位置的数据集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12412141/

相关文章:

python - 带颜色条的 Matplotlib 3D 散点图

javascript - 为什么我的球消失了?

geometry - 如何计算垂线的坐标?

C++ 预处理器 __typeof

c++ - SecVerifyTransformCreate 内存泄漏?

c++ - 就像儒略数是用来计算日期有没有具体的数字来计算时间

c++ - 如何在不在 C++ 中创建函数对象的情况下将函数指针作为模板值参数传递?

c++ - reprojectImageto3D(OpenCV) 和 3D 坐标的差异有什么区别?

geometry - 多边形之间的交点作为线剪

python - pyopengl:它能取代 C++ 吗?