这是我的坐标系:http://rubidium-style.com/upload/naburus_primus/grid.png
尺寸为5 * 5。我很乐意在c#中生成你可以在图片上看到的所有坐标。我怎样才能做到这一点? 我一直用25增加以下单元格。 这就是我的代码目前的样子,但它只能在一个方向上起作用。它必须是动态的,所以如果我将5 * 5增加到100 * 100,它应该可以正常工作。
代码:
int landSize = 5;
int landRegion = landSize * landSize;
int landDist = 25; // 25 cm, (1 cell size)
for (int i=0; i<landRegion; i++){
int[] x;
const int y = 0;
int[] z;
Debug.Log(x[i]);
Debug.Log(z[i]);
}
我不想告诉你我不想让你迷惑的企图。我很乐意将坐标数据加载到数组中。
答案 0 :(得分:3)
要从0..24值到x和y方向的0..4值,你可以这样做:
for (int i=0; i<landRegion; i++){
int y = i / landSize;
int x = i % landSize;
对于每个i / landSize
(5)值, y
会将landSize
增加1,这意味着对于区域0到4将为0,对于5到9将为0,对于10到10将为2 14,等等。
i % landSize
的每个新值, i
将增加1,然后当它通常达到5时回到0,因此它将跟随x轴。
然后,要获得-2 .. + 2,您将减去landSize / 2
:
for (int i=0; i<landRegion; i++){
int y = (i / landSize) - landSize / 2;
int x = (i % landSize) - landSize / 2;
然后,从那里得到-50 .. + 50(以25为增量),乘以25(或在这种情况下为landDist
):
for (int i=0; i<landRegion; i++){
int y = ((i / landSize) - landSize / 2) * landDist;
int x = ((i % landSize) - landSize / 2) * landDist;
这种计算方法的好处是,如果你只用任何区域的索引替换i
,你可以直接计算它的坐标,而不必每次都从0开始完整循环。
请注意,此计算存在landSize
值可被2整除的问题,因为它没有明确定义的中心。如果将其减少到4以上,坐标将从-50到+25。您必须决定如何处理这种情况并相应地更改代码。
看着你的照片,你似乎已经调用了我为z命名的坐标,并将它从+50下调到-50,所以这是最终的代码:
for (int i=0; i<landRegion; i++){
int z = -((i / landSize) - landSize / 2) * landDist;
int x = ((i % landSize) - landSize / 2) * landDist;
如果您需要将其填充到数组中供以后参考,则可以这样做:
int[] z = new int[landRegion];
int[] x = new int[landRegion];
for (int i=0; i<landRegion; i++){
z[i] = -((i / landSize) - landSize / 2) * landDist;
x[i] = ((i % landSize) - landSize / 2) * landDist;
}
答案 1 :(得分:2)
由于常量,它有点过于冗长,但这应该适合你。
const Int32 xMin = -50;
const Int32 xMax = +50;
const Int32 xStep = 25;
const Int32 zMin = -50;
const Int32 zMax = +50;
const Int32 zStep = 25;
for (var z = zMin; z <= zMax; z += zStep)
{
for (var x = xMin; x <= xMax; x += xStep)
{
Console.WriteLine("x: {0} z: {1}", x, z);
}
}
请注意,此命令z
已撤消; for (var z = zMax; z >= zMin; z -= zStep)
将产生与描述相同的顺序。
答案 2 :(得分:0)
您可以使用Point结构来保存坐标,并使用Point []来存储多个坐标。
使用System.Drawing; 使用System.Collections.Generic;
List<Point> arrPoint = new List<Point>();
arrPoint.Add(new Point(10, 20));
arrPoint.Add(new Point(15, 25));
arrPoint.Add(new Point(20, 30));