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

时间:2012-09-13 18:01:34

标签: 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个点的平面方程和法向量。 但是现在我该如何根据这个等式创建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 ++的引用对于我在这里遇到的这个问题有所了解。

谢谢你, 马特

1 个答案:

答案 0 :(得分:1)

您可以将您的平面视为由一个点和一对orthonormal basis向量定义(这意味着两个长度为1的矢量,彼此相距90度)。您最基本的平面可以定义为:

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

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

p1 = p0 + dx * vx + dy * vy

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

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

  1. 采用上面的默认基础向量(vxvy)。
  2. 旋转它们直到它们定义您想要的平面(您可能也可能不需要旋转原点,具体取决于问题的定义方式)。
  3. 应用公式,并得到答案。
  4. 现在轮换时有一些怪癖(订单很重要!),但这是基本的想法,应该足以让你走上正确的轨道。祝你好运!