生成立方体的坐标

时间:2011-04-09 19:07:33

标签: c# algorithm

嗨我只是在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 个答案:

答案 0 :(得分:2)

没有太多改变你的代码(假设你的意思是所有角点,它有点不清楚):

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个边的坐标集。

修改:

通过上述解决方案,不同侧面(边缘点)之间存在重叠,因此您必须使用所有3个集合的并集。更好的解决方案是一次查询所有坐标:

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