将二维坐标转换为一维数组
Posted
技术标签:
【中文标题】将二维坐标转换为一维数组【英文标题】:Translate a 2D coordinate into a 1D array 【发布时间】:2018-06-24 11:03:50 【问题描述】:我也看过:
Convert a 2D array index into a 1D index
我正在尝试调试我的程序,我需要了解如何将二维坐标转换为一维坐标。
如果我有一个 IJ 坐标,例如:(3284,1352),我们想访问一个一维数组,即 (3492,2188),我们如何实现呢?
到目前为止我已经尝试过:
1) 我认为你对每一行和每一行内每一列的偏移为:
i x j = 3284 * 1352 = 4.439.968
如果我们有坐标 (3284,1352) 以图形方式对应于灰度强度为 1 的片段:
我们尝试访问每个像素的灰度值的一维数组,以像素为单位:4.439.968
我们有:
14
的灰度强度
这很奇怪,因为:
-> ITKSnap 没有显示第 14 段:
-> 我们的段的灰度为1,那么我们应该在手动计算访问哪个索引后,找到那个灰度:
2)我尝试的第二种方法是将其计算为:
column clicked * number of total rows + row clicked;
j * xLength + i;
在我们的例子中是:
1352 * 3492 + 3284 = 4.724.468
如果我们试图在数据中找到那个像素:
我们发现灰度为0,对应背景。
转换有什么问题?
你能帮帮我吗?
【问题讨论】:
我认为应该是:row clicked * number of total columns + column clicked;
,因为它通常先经过列然后再经过行(从左到右然后从上到下)。
【参考方案1】:
我认为你需要这样的东西:index = (y * maxColumns) + x
(看起来像你的 j=x 和 i=y)
我画了一些东西来可视化它:
【讨论】:
我认为没有必要拨打Math.round
。都是整数运算,对吧?
是的,你说得对,我只是从一个项目中复制出来的,在该项目中我使用Math.sqrt
计算总列数。 (而且我最近在尝试访问具有浮点值的数组时遇到了问题,因为 JS 中没有 int,所以我现在到处都放一个 Math.round
;D)以上是关于将二维坐标转换为一维数组的主要内容,如果未能解决你的问题,请参考以下文章