Как стать автором
Обновить

Додекаэдр из символов для мини-игры "Игра с Нулём»".

Бросаешь 12-гранный кубик: на 11 гранях - ресурсы, а на одной - полное обнуление прогресса в основной игре. Рискнули бы?

Координаты вершин додекаэдра со списком ребер и граней сходу не нашел. Вычислял сам. Если будет полезно, то вот массивы и вычисления для додекаэдра, вписанного в сферу единичного радиуса.

        // Verteсes
        Vector3[] verts = new Vector3[] {
            new Vector3(0.577350f, 0.577350f, 0.577350f),   // v1
            new Vector3(0.577350f, 0.577350f, -0.577350f),  // v2
            new Vector3(0.577350f, -0.577350f, 0.577350f),  // v3
            new Vector3(0.577350f, -0.577350f, -0.577350f), // v4
            new Vector3(-0.577350f, 0.577350f, 0.577350f),  // v5
            new Vector3(-0.577350f, 0.577350f, -0.577350f), // v6
            new Vector3(-0.577350f, -0.577350f, 0.577350f), // v7
            new Vector3(-0.577350f, -0.577350f, -0.577350f),// v8
            new Vector3(0, 0.934172f, 0.356822f),           // v9
            new Vector3(0, 0.934172f, -0.356822f),          // v10
            new Vector3(0, -0.934172f, 0.356822f),          // v11
            new Vector3(0, -0.934172f, -0.356822f),         // v12
            new Vector3(0.356822f, 0, 0.934172f),           // v13
            new Vector3(0.356822f, 0, -0.934172f),          // v14
            new Vector3(-0.356822f, 0, 0.934172f),          // v15
            new Vector3(-0.356822f, 0, -0.934172f),         // v16
            new Vector3(0.934172f, 0.356822f, 0),           // v17
            new Vector3(0.934172f, -0.356822f, 0),          // v18
            new Vector3(-0.934172f, 0.356822f, 0),          // v19
            new Vector3(-0.934172f, -0.356822f, 0)          // v20
        };

        // Calc edges
        const float edgeLength = 0.7136f;
        const float epsilon = 0.0001f;
        var edges = new List<(int a, int b)>();
        Vector3 v1, v2;
        float dx, dy, dz, dist;

        // Check all pairs of vertices
        for (int i = 0; i < verts.Length; i++)
            for (int j = i + 1; j < verts.Length; j++) {
                v1 = verts[i];
                v2 = verts[j];
                dx = v2.x - v1.x;
                dy = v2.y - v1.y;
                dz = v2.z - v1.z;
                dist = Mathf.Sqrt(dx * dx + dy * dy + dz * dz);
                if (Mathf.Abs(dist - edgeLength) < epsilon) 
                    edges.Add((i, j));
            }

        // Faces
        int[,] facesIDS = new int[12, 5] {
            { 0, 16, 1, 9, 8 },
            { 12, 0, 16, 17, 2 },
            { 8, 0, 12, 14, 4 },
            { 1, 16, 17, 3, 13 },
            { 9, 1, 13, 15, 5 },
            { 10, 11, 3, 17, 2 },
            { 2, 12, 14, 6, 10 },
            { 3, 11, 7, 15, 13 },
            { 6, 14, 4, 18, 19 },
            { 4, 8, 9, 5, 18 },
            { 5, 15, 7, 19, 18 },
            { 6, 19, 7, 11, 10 }};

Сделал и возвращаюсь к допилу версии для плейтеста. Чуть-чуть осталось. Заходите добавить в желаемое и записаться на плейтест.

Теги:
+3
Комментарии0

Публикации

Ближайшие события