硬面测地球

时间:2015-06-24 11:04:38

标签: algorithm geometry procedural

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

enter image description here

我想为像这样的测地球创建一个算法。我的事情是我需要六角形的面孔和像我找到的大多数算法一样,五边形在平面上不是球形的。如果算法可以找到下一步也很好,所以我可以提升'tesselations',因为缺少一个更好的词。基本上有较小的六边形和接近它的五边形。

找到一些方法来制作一些较低的细分,但即使这样也会使得像附图一样的画面对我的任务来说已经足够了。对于我的项目,面孔需要很难。

1 个答案:

答案 0 :(得分:0)

这里是script,用于生成常规二十面体。

然后您可以使用此算法(带有Vector3结构的C#)细分每个三角形:

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});
        }
    }
}

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

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