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

时间:2018-11-28 18:27:49

标签: math vector trigonometry

我在3D空间中有一些三角形,它们起源于0,0,0,并朝着两个点p1 = -x0,0,z0和p2 = + x0,0,z0延伸。这是在Unity中实现的,因此+ z是前向轴(即,它们平放)。每个三角形都是其自己的网格,枢轴位于0,0,0。

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

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

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

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

1 个答案:

答案 0 :(得分:0)

问题在于将前进轴设置为(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))

问题解决了。