我正在尝试用一堆tetrahedra渲染一些3D图形。我试图弄清楚如何旋转一个四面体,使其与另一个四面体完美面对面。如果这令人困惑,那么面对面碰撞的多个四面体看起来就像this。
我正在使用OpenGL以编程方式旋转对象,因此我一次只能在三个轴中的一个轴上旋转。例如,我可以在X上顺时针旋转20度,然后在Z上逆时针旋转45度等
我理解这个程序的编程方面(使用OpenGL的glRotatef()函数一次在一个轴上旋转),但是对每个轴所需的特定角度更感兴趣,以实现三维镶嵌。
感谢您的帮助,如果您需要更多说明,请与我们联系。
答案 0 :(得分:3)
如果他们需要完美地面对面,我根本不会尝试找到轮换。
相反,我会从一个四面体开始。决定哪一张脸与下一张脸分享。
取这个面上两条边的叉积(50%的几率指向第四点的方向,在这种情况下反转矢量)。规范化。乘以sqrt(6)/ 3 * edge_length(这是一个常数,预计算!)。
你现在有一个向量指向新四面体的第四个顶点的方向(你已经知道的另外三个,它们与面上的那些相同!),其长度与新四面体的高度相同。 / p>
您现在需要的只是矢量的原点:取3个共享顶点坐标的算术平均值,这将给出该面的中心点。
将矢量添加到该点,为您提供最终点。
现在你有两个四面体共用一个面(无论方向如何),不需要旋转数学。