这是我想要创建的几何类型的图像。
我想为像这样的测地球创建一个算法。我的事情是我需要六角形的面孔和像我找到的大多数算法一样,五边形在平面上不是球形的。如果算法可以找到下一步也很好,所以我可以提升'tesselations',因为缺少一个更好的词。基本上有较小的六边形和接近它的五边形。
找到一些方法来制作一些较低的细分,但即使这样也会使得像附图一样的画面对我的任务来说已经足够了。对于我的项目,面孔需要很难。
答案 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
是否已创建来改善算法。然后,您可以收集在角对象中连接角的三角形。这种方法使最终面的生成更加容易。