Генерация координат для куба - PullRequest
0 голосов
/ 09 апреля 2011

Привет, я просто пишу функцию в C #, которая генерирует координаты для куба, но проблема, которую я хочу просто

генерировать координаты сторон куба не в глубине !!!

static class Util
{
    public static List<string> GenerateCubeCoord(double bc,int nt,double stp)
    {
        List<string> list = new List<string>();
        double CoorBase = bc;
        int n = nt;
        double step = stp;
        int id = 1;
        for (int x = 0; x < n; x++)
        {
            for (int y = 0; y < n; y++)
            {
                for (int z = 0; z < n; z++)
                {
                    list.Add(string.Format("GRID {0} {1}.0 {2}.0 {3}.0 \n",
                        id, step * x + CoorBase, step * y + CoorBase, step * z + CoorBase));

                    id++;
                }
            }
        }

        return list;
    }

}

Я смотрю, чтобы сгенерировать все эти координаты, а не угловые координаты куба, на изображении один

сторона майского куба

enter image description here

1 Ответ

2 голосов
/ 09 апреля 2011

Не слишком меняя код (если вы имели в виду все угловые точки , это немного неясно):

for (int x = 0; x <= n; x += n)
    for (int y = 0; y <= n; y += n)
        for (int z = 0; z <= n; z += n)
            Console.WriteLine("{0} {1} {2}", x, y, z);

Немного чище с помощью LINQ:

int n = 6;
var coords = from x in new[] { 0, n }
             from y in new[] { 0, n }
             from z in new[] { 0, n }
             select new { x, y, z };

foreach(var coord in coords)
    Console.WriteLine("{0} {1} {2}", coord.x, coord.y, coord.z);

Изменить после обновленного вопроса:

Если вам нужны координаты сторон, допустимые значения для одной координаты (x, y или z) равны 0 или n-1:

var coords = from x in new[] { 0, n-1 }
             from y in Enumerable.Range(0, n) 
             from z in Enumerable.Range(0, n) 
             select new { x, y, z };

Сполосните и повторите для двух других, и у вас будет набор координат для всех 6 сторон.

Редактировать:

В приведенном выше решении есть перекрытия между различными сторонами (краевые точки), поэтому вам придется использовать объединение всех трех коллекций. Лучшее решение - запросить все координаты за один раз:

var coords = from x in Enumerable.Range(0, n)
             from y in Enumerable.Range(0, n) 
             from z in Enumerable.Range(0, n) 
             where ( x == 0 || x==n-1 || y == 0 || y== n-1 || z == 0 || z== n-1)
             select new { x, y, z };
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...