0

这是我要创建的几何类型的图像。

在此处输入图像描述

我想为这样的测地球创建一个算法。我的事情是我需要六边形和五边形的面是平的,而不是像我发现的大多数算法那样本质上是球形的。如果算法能找到下一步,那也很好,这样我就可以在没有更好的词的情况下向上移动“镶嵌”。基本上有更小的六边形和五边形接近它。

找到了一些方法来制作一些较低的镶嵌,但即使这样也会使一个像所附图片一样的方法足以完成我的任务。不过,对于我的项目来说,这些面孔需要很硬。

4

1 回答 1

0

这是一个生成正二十面体的脚本。

然后你可以用这个算法细分每个三角形(C# with Vector3struct):

Vector3[] icoTriangleCorners = new Vector3[3];

public void Subdivide(HashSet<Vector3[]> faces, int subdivision, double radius) {

    Vector3 x = (icoTriangleCorners[1] - icoTriangleCorners[0]) / (subdivision + 1);
    Vector3 y = (icoTriangleCorners[2] - icoTriangleCorners[1]) / (subdivision + 1);

    for(int i = 0; i <= subdivision; ++i) {
        for(int j = 0; j <= i; ++j) {
            Vector3 a = (icoTriangleCorners[0] + i * x + j * y).normalized * radius;
            Vector3 b = (icoTriangleCorners[0] + (i + 1) * x + j * y).normalized * radius;
            Vector3 c = (icoTriangleCorners[0] + (i + 1) * x + (j + 1) * y).normalized * radius;

            faces.Add(new Vector3[] {a, b, c});

            if (i == j) continue;

            Vector3 d = (icoTriangleCorners[0] + i * x + (j + 1) * y).normalized * radius;

            faces.Add(new Vector3[] {c, d, a});
        }
    }
}

它以相同的顺时针顺序生成具有顶点的新三角形面。测地线球的顶点是三角形的质心。五边形和六边形的中心是三角形的角。

您可以通过为角创建一个新类并检查Vector3角的是否已经创建来改进算法。然后,您可以收集连接角对象中角的三角形。这种方法使最终面的生成更容易。

于 2019-09-08T07:56:29.930 回答