如何在c#中生成坐标系

本文关键字:坐标系 | 更新日期: 2023-09-27 18:02:32

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

我不想让你看到我试图不让你混淆。我想把坐标数据加载到数组中

如何在c#中生成坐标系

从0..24 ~ 0..在x和y方向上,你会这样做:

for (int i=0; i<landRegion; i++){ 
    int y = i / landSize;
    int x = i % landSize;

i / landSizey每增加1个landSize(5)值,这意味着从区域0到4它将为0,从区域5到9为1,从区域10到14为2,等等。

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。您必须决定如何处理这种情况,并相应地更改代码。

看你的图片,好像你把坐标y称为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;
}

由于常量的关系,这有点过于啰嗦了,但这应该可以为您工作。

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)将产生与描述相同的顺序。

您可以使用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));