嗨我只是在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;
}
}
我想生成所有这个坐标而不是立方体的角坐标,在图像中
可能立方体的一面
答案 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 };