如何在c#中生成坐标系?

时间:2014-05-08 20:29:19

标签: c#

这是我的坐标系: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]); 

}

我不想告诉你我不想让你迷惑的企图。我很乐意将坐标数据加载到数组中。

3 个答案:

答案 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));