将笛卡尔坐标中的点x,y映射为二维数组元素
本文关键字:数组元素 二维 映射 坐标 笛卡尔 | 更新日期: 2023-09-27 18:14:01
我想创建一个环境的地图,即。我的房间。我想用二维数组来表示我的房间。
我正在尝试映射一个房间,它的坐标开始于(5,5),(10,5),(5,10)和(10,10)。这是一个5x5的正方形,如果你想知道的话。我想把它映射成一个100x100单元格的二维网格。
我用来映射的数学是,
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)从右下角开始,在这个例子中我的意思是。但是,通过使用我上面展示的数学,它似乎将房间映射到一个二维数组中,其中(0,0)从左下角开始,(100,100)在右上方结束,(0,100)在左上角,(100,0)在右下角。
我想把房间映射过来,这样结果就会像数组结构那样排序。
感谢您的帮助。
更新:这个想法还是和上面一样,这里有一张图来进一步说明。
https://i.stack.imgur.com/h4Mgm.png使用你的符号:
X' = maxRangeY - ((maxRangeY - minRangeY)*(maxY-(Y - minY))/(maxY - minY) + minRangeY)
Y' = maxRangeX - ((maxRangeX - minRangeX)*(maxX-(X - minX))/(maxX - minX) + minRangeX)
x的"逆"映射到y的"逆",y的"逆"映射到x的"逆"。
c#函数: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在第一个正方形和第二个正方形上的范围是相同的,分别
-较大正方形中的中间点不计算(插值)