C#/Unity:在 3D space 中旋转三角形以形成 2D 多边形

C#/Unity: Rotating triangles in 3D space to form a 2D polygon

我有一些 3D 三角形 space,它们从 0,0,0 开始延伸到两个点 p1= -x0, 0, z0 和 p2= +x0, 0, z0。这是在 Unity 中,因此 +z 是前向轴(即它们平放)。每个三角形都是自己的网格,枢轴位于 0,0,0。

现在,我想旋转这些(使用 Quaternion.LookRotation),使它们的末端形成一个连续的多边形,如果是三个三角形,则为三角形,如果是四个三角形,则为正方形,等等。

我的方法是根据每个三角形的长度(即2*x0)计算得到的多边形的内圆半径。如果我现在计算这个圆上的 n 个点(其中 n 是我拥有的三角形的数量),我会得到 x/y 坐标,我可以直接使用它来正确设置每个三角形的 "up" 轴,即 Quaternion.LookRotation(Vector3.forward, new Vector3(x,y,0))。这使三角形围绕 z 轴正确定向,即中心仍在 0,0,1。

然而,这让我感到难过,我仍然需要改变三角形的前向轴,使它们倾斜以形成最终的多边形。我尝试使用 new Vector3(x,y,z0) 给出了几乎正确的结果,但导致边缘重叠。我怀疑这是因为三角形的旋转有效地改变了 z0,但我不确定如何进行。

我的问题是,如何计算新的前轴以使三角形正确对齐?

问题是将正向轴设置为 (x,y,z0),这是错误的,因为矢量的长度 (x,y,z0) 不等于原始长度(即 z0)。因此需要调整 z 值,使得 new Vector(x,y,z1).magnitude == z0。这可以通过计算

来完成

Mathf.Sqrt(Mathf.Pow(z0, 2) - Mathf.Pow(x, 2) - Mathf.Pow(y, 2))

问题已解决。