我想创建一个环境地图,即。我的房间。我希望使用2D Array对我的房间进行2D表示。
我正在尝试绘制一个房间,其坐标从(5,5),(10,5),(5,10)和(10,10)开始。如果你想知道,这是一个5x5大小的正方形。我想将其映射到100x100单元格的2D网格中。
我用来映射的数学是,
X' = (maxRangeX - minRangeX)*(X - minX)/(maxX - minX) + minRangeX
Y' = (maxRangeY - minRangeY)*(Y - minY)/(maxY - minY) + minRangeY
,其中
maxRangeX 100 maxX 10 maxRangeY 100 maxY 10
minRangeX 0 minX 5 minRangeY 0 minY 5
如你所知,Array工作的方式是它在左上角开始(0,0),在右下角开始(100,100),在这种情况下我的意思是。但是,通过使用我上面显示的数学,它似乎将房间映射到2D数组,其中左下角为(0,0),右上角为(100,100),左上角为(0,100),(100, 0)在右下角。
我想映射房间,以便在数组结构的结构中对结果进行排序。
非常感谢任何帮助。
更新
这个想法仍然如上所述,这里有一张图片可以进一步说明。
答案 0 :(得分:0)
X' = maxRangeY - ((maxRangeY - minRangeY)*(maxY-(Y - minY))/(maxY - minY) + minRangeY)
Y' = maxRangeX - ((maxRangeX - minRangeX)*(maxX-(X - minX))/(maxX - minX) + minRangeX)
x的“反转”映射到y的“反转”,y的“反转”映射到x的“反转”。
static int Transform(int coord, int coordMin, int newCoordMin, double factor)
{
return (newCoordMin + (int)((coord - coordMin) * factor));
}
static void Transform(int[,] arrIn, int minX, int minY, int maxX, int maxY,
out int[,] arrOut, int minRangeX, int minRangeY, int maxRangeX, int maxRangeY)
{
double factorX = (maxRangeX - minRangeX) / (maxX - minX);
double factorY = (maxRangeY - minRangeY) / (maxY - minY);
arrOut = new int[maxRangeX + 1, maxRangeY + 1];
for (int x = minX; x <= maxX; ++x)
for (int y = minY; y <= maxY; ++y)
arrOut[maxRangeY - Transform(y, minY, minRangeY, factorY), maxRangeX - Transform(x, minX, minRangeX, factorX)] = arrIn[maxX - (x - minX), maxY - (y - minY)];
}
这是有效的,假设以下条件:
- x和y的范围对于第一个方格和第二个方格分别相同
- 不计算(插值)较大方块中的中间点