这是你要问的吗?
将像 xy 平面这样的简单平面转换为平面非常简单:
你的飞机是 Ax+By+Cz+D=0
xy 平面只是 z=0。即A = B = D = 0,而C =你想要的。为简单起见,我们会说 1。
当您有这种形式的平面时,平面的法线由矢量 (A,B,C) 定义
所以你想要一个从 (0,0,1) 到 (A,B,C)* 的旋转
*请注意,这仅在 {A,B,C} 是单一的情况下才有效。所以您可能必须将 AB 和 C 分别除以 sqrt(A^2+B^2+C^2)。
仅围绕其中两个轴旋转可以使您从任何方向转到任何其他方向,因此我们将选择 x 和 y;
这里是 a 绕 x 轴旋转和 b 绕 y 轴旋转的旋转矩阵。
Rx := {{1, 0, 0}, {0, Cos[a], Sin[a]}, {0, -Sin[a], Cos[a]}}
Ry := {{Cos[b], 0, -Sin[b]}, {0, 1, 0}, {Sin[b], 0, Cos[b]}}
如果我们绕 x 旋转,然后绕 y 旋转垂直于 xy 平面的向量 (0,0,1),我们得到:
Ry.Rx.{0,0,1} = {-Cos[a] Sin[b], Sin[a], Cos[a] Cos[b]}
这是你的 ABC 值。
IE
A = -Cos[a]Sin[b]
B = 罪[a]
C = Cos[a]Cos[b]
从这里开始,很简单。
a = aSin[B]
所以现在 A = -Cos[aSin[B]]Sin[b]
Cos[aSin[x]] = sqrt(1-x^2) 所以:
A = -Sqrt[1-B^2] * Sin[b]
b = aSin[-A/sqrt[1-B^2]]
a = aSin[B](绕 x 轴旋转)
b = aSin[-A/sqrt[1-B^2]](绕y轴旋转)
所以我们现在有了需要旋转的关于 x 和 y 轴的角度。
在此之后,您只需向上或向下移动您的飞机,直到它与您已有的飞机相匹配。
您现在拥有的平面(在这两次旋转之后)将是 Ax+By+Cz=0。
你想要的飞机是Ax+Bx+Cz+D=0。要找出 d,我们将查看 z 轴与您的平面相交的位置。
即 Cz+D=0 -> z = -D/C
因此,我们通过 -D/C 将您的 z 在 Ax+By+Cz=0 中转换为:
Ax+By+C(z+D/C) = Ax+By+Cz+D=0。哦,你会看那个!
事实证明,一旦你有了旋转的角度,你就不必做任何额外的数学运算了!
这两个角度将为您提供 A、B 和 C。要获得 D,您只需从已有的内容中复制它。
希望这对您有所帮助,但我不完全确定您打算如何实际绘制飞机...
编辑以修复一些可怕的格式。希望现在好多了。