我需要创建一个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 ++的引用对于我在这里遇到的这个问题有所了解。
谢谢你, 马特
答案 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
如果您的偏移沿着给定的轴(听起来像它们),此公式将始终有效。如果向量已经旋转,这仍然是正确的 - 这就是你将要使用的属性。
所以要找到一个沿旋转平面偏移的点:
vx
和vy
)。现在轮换时有一些怪癖(订单很重要!),但这是基本的想法,应该足以让你走上正确的轨道。祝你好运!