网格图像值到二维数组

Grid image values to 2D array

我有一个如下图所示的网格,我想将其放入以下格式的数组中:

 ;x = wall(black cells and grey boxes), s= start (red circle), g = goal(blue circle), 0 = available path(everything else)
 $data[5][5] = [["x","x","x","x","x"], _
               ["x","s","0","x","x"], _
               ["x","x","0","x","x"], _
               ["x","x","0","g","x"], _
               ["x","x","x","x","x"]]

我想我可以使用这些颜色,但我不确定如何。

  1. 看起来你的视角是固定角度的

    创建将屏幕位置转换为网格位置并返回的函数。 2x 线性插值应该很容易。如果相机平移不是基于单元格的步骤,那么您需要网格线的角点并将其用作起点 ...

    例如像这样的东西(希望我正确测量了像素):

    x = 236 + (+(u-uh)-(v-vh))*60;
    y = 133 + (-(u-uh)-(v-vh))*30;
    
    • 60,30x,y
    • 中的单元格大小
    • (236,133) 是中间单元格中心的位置 (uh,vh) 以像素为单位
    • uh,vh 是中心单元格网格中的坐标

    将视图平移偏移量添加到 (uv,hv)(236,133) 现在只需计算此 (u=?,v=?) 的反向变换。不要忘记地图不是矩形的!它是这样的:

        0000x0000,
        000xxx000,
        00xxxxx00,
        0xxxxxxx0,
        xxxxxxxxx,
        0xxxxxxx0,
        00xxxxx00,
        000xxx000,
        0000x0000,
    
  2. 创建一组您可以遇到的所有对象的图像

    这可以在 运行 上完成,每次您没有找到匹配项时,将单元格作为新对象类型添加到项目列表中。

  3. 遍历所有网格单元格位置并与对象类型进行比较

    对于像素精确的渲染图像,您可以直接比较像素 1:1 如果不是这种情况,您需要更稳健地比较对象。但是为了制定一个有效的算法,我们需要查看您可以遇到的所有类型的对象,通常您可以比较:

    1. 平均、最小和最大颜色、直方图,
    2. 纵横比,...
    3. FFT/DCT
    4. 质心位置、密度等

    不要忘记屏蔽与单元格区域的比较,仅不包括边界矩形角上的相邻单元格

[注释]

没有进一步的信息就不能更具体