绘制一个平面
我想绘制一个由等式给出的平面:Ax + By + Cz + D = 0。
我首先尝试通过设置x,y来绘制他,然后从等式中得到z。这不行,因为有一些平面,如0x + 0y + z + 0 = 0等...
我目前的解决方案是:
- 通过给出无限远的4个坐标在ZY平面上绘制平面。
- 找出应该完成的旋转,以便使给定平面(a,b,c)的法线平躺
在z轴上。
- 找到应该完成的平移,以使该平面位于x轴上。
- 对那些旋转进行完全相反的转换,然后我将得到这个转换
飞机在他的位置。
好
这是一件很棒的事情,但我可以使用点积等进行正确的数学运算(尝试很多次......)....
有人可以帮助我理解它应该做的确切方式或给我一些公式,我将把ABCD和正确的转换?
没有找到相关结果
已邀请:
2 个回复
芜任亮蜡
犀寺扦
这里,z0是平面的法线,o是平面的原点,x0和y0是平面内垂直于z0的两个矢量,用于定义投影的旋转和倾斜。 然后,您的XY平面上的任何点(x,y)都可以使用以下内容投影到新平面的点(p_x,p_y,p_z):
现在,你的变换矩阵中的z0很简单,这就是你的飞机的法线,那就是
。 然而,在选择其余部分时,您拥有明显更多的自由。对于原点,您可以指出平面与Z轴相交的点,除非平面与Z轴平行,在这种情况下您需要其他东西。 所以例如
在实践中你可能想要比ѭ4更喜欢不同的测试,因为通过该测试即使c非常小但只是与零不同,导致你的起源是,5ѭ,这可能是不可取的。所以像
这样的测试可能更可取。然而,您当然可以在平面中采用完全不同的点来放置原点,也许是最接近原始坐标系原点的点,即:
最后我们需要弄清楚x0和y0。这可以是与z0正交的任何两个线性独立的向量。 首先,让我们在XY平面中为x0向量选择一个向量:
现在,如果您的z0恰好是(0,0,z0_z)形式,则会失败,因此我们需要一个特殊情况:
最后让我们说我们不要歪斜并选择y0与x0和y0正交,然后使用交叉产品
现在,您可以填充转换矩阵。 免责声明:对您的数字使用浮点表示时应该采取适当的措施,在这些情况下,简单(foo == 0)测试是不够的。在开始实现之前,先阅读浮点数学。 编辑:为了清楚起见重命名了一些变量