这是在 C 中。
我有两个二维数组 ArrayA 和 ArrayB,它们对相同的空间进行采样。B 对与 ArrayA 不同的属性进行采样的频率低于 ArrayA,因此它比 A 小。
只是想尝试定义一些变量: ArrayA:SizeAX 按 SizeAY,由 indexA 索引,用于位置 posAX,posAY ArrayB:SizeBX,按 SizeAY,由 indexB 索引,用于位置 posBX,posBY
ArrayA 和 ArrayB 是指向数组开头的指针,其中先存储 X 的行,然后递增 Y,然后存储下一行 X(Y=1)
所以我需要从给定的 indexA 设置 indexB,使其成为最近邻样本,以与 indexA 的值相关联。
这是我所在的位置(请更正任何错误!请注意,我从索引 0 开始):如果 ArrayA 是 9x9 而 ArrayB 是 3x3: (posX,posY) posA 0,0; indexA = 0 posB 0,0; 指数B = 0
POSA 8,0; indexA = 8(第一行结束)posB 2,0;指数B = 2
位置 0,1; indexA = 9 posB 0,0; indexB = 0(仍然更接近底部点)
位置 0,3; indexA = 27 posB 0,1;指数B = 3
POSA 8,8; indexA = 80(最后一点)posB 2,2;指数B = 8
到目前为止我有: indexA = posAX + (posAY * SizeAX)
我尝试过的(当然失败了): indexB = (int) (indexA * (SizeBX * SizeBY / (SizeAX * SizeAY)) + 0.5) // 似乎只适用于第一行和最后一个值.. 但是这显然是行不通的——但我很好奇它是如何将两者映射在一起的,但我会在修复它后研究它。
我无法访问 posAY 或 posAX,只能访问 indexA,但我应该能够使用 mod 和余数将其分解,对吧?还是有更有效更快的方法?一个
我也试过这个:
indexB = (posAY * SizeBY / SizeAY) * SizeBY + (posAX * SizeBX / SizeAX)
我认为问题是我需要将 X 和 Y 索引分开,然后再使用 SizeBX 和 SizeBY ?
一个额外的警告是 ArrayA 和 ArrayB 来自更大的数据集,它们都对更大的空间进行采样。由于矩形是任意的,因此 ArrayA 或 ArrayB 可能具有最接近矩形边界的点,从而导致其他问题,即最近邻居真正抓取的方式。我也不确定如何解决这个问题。