【问题标题】:trouble converting index to row将索引转换为行时遇到问题
【发布时间】:2018-11-23 15:36:53
【问题描述】:

我无法将索引号转换为相应的列/行。表格是这样的

图表在每个维度上进行缩放。每个正方形被一个空白区域包围。我需要把正方形的数字变成x/y坐标

我已经弄清楚了列,但行仍然在逃避我。

这就是我现在拥有的:

#define IDtoX(n, w) ((2*(n%w))+1)
#define IDtoY(n, h) ((2*(n/h))+1)

IDtoX 按预期工作。 IDtoY 没有。

输出应该如下:

宽 7 高 5 的网格:

n  y
0   3
1   3
2   3
3   1
4   1
5   1

宽 9 高 7 的网格:

0   5
1   5
2   5
3   5
4   3
5   3
6   3
7   3
8   1
9   1
10  1
11  1

【问题讨论】:

  • 图表在每个维度上进行缩放。每个正方形被一个空白区域包围。我需要把正方形的数字变成 x/y 坐标。
  • 这些附加信息使您的问题大大变得更好。 SergGr 击败我将这些信息编辑到您的问题中。

标签: math matrix indices


【解决方案1】:

函数IDtoY(n, h) 失败的主要原因是结果还取决于w 的值。因此,您必须将您的签名更改为IDtoY(n, w, h)。要看到这一点,请尝试绘制更多具有相同hs 但不同ws 的数组,您会看到ids 也会随着每个n 而变化。你被IDtoX 的成功函数所愚弄,它确实不依赖于h,而只依赖于nw。现在,如果您的 ids 从顶部的零开始,它们将不依赖于 w,但当您绘制数组时,它们会依赖。

我发现了多个有效的公式,但没有一个是漂亮的。这里有两个——如果你不喜欢它们,你可以找到一些等价的公式。

#define IDtoY(n, w, h) (h - 2 - 2 * n // (w - 1) * 2)

或许

#define IDtoY(n, w, h) (h - 2 - n // (w // 2) * 2)

// 运算符是整数除法。您没有说明您使用的是哪种计算环境——简单的/ 运算符可能适合您。

【讨论】:

  • Rory,我相信 #define 术语是 C/C++ 被用作语言的一个好兆头,因此整数除法应该只是 /
猜你喜欢
  • 2014-02-28
  • 2022-01-25
  • 1970-01-01
  • 2018-01-08
  • 2013-10-14
  • 1970-01-01
  • 1970-01-01
  • 2017-12-01
  • 1970-01-01
相关资源
最近更新 更多