-1

这部分与数学有关,但由于我是在 VB.NET 中做的(并且因为程序员知道数学但数学家可能不知道编程:)),所以我更有可能在这里得到更快的答案:

我正在以表格格式打印图像。每页有 M 行 N 列。如果图像的数量超过一页可以容纳的数量,我们将转到下一页,依此类推。这里的问题是,给定图像的索引号,给我图像的从零开始的行/列的最短表达式是什么(不知道它将落在哪个页码上)?

花了一些时间后,我想出了以下内容,但它不能处理一些极端情况(M是列数,N是行数,Index是基于 1 的):

Dim R = (Index - Index Mod (M * N)) \ M - 1 
Dim C = Index Mod M 

NB 打印从左到右先到下一行。

4

1 回答 1

0

首先,我将重新定义符号:

rowCount = N
columnCount = M

如果 page 无关紧要,则首先将 更改index为 page-ignorant:

pageSize = rowCount * columnCount
index = index % pageSize

然后,如果您首先迭代行(我的意思是当index移动时,它会进入下一列 - 所以它会沿着一行滑动,并在行的末尾进入下一行)然后:

rowNumber = floor(index / columnCount)
columnNumber = index - rowNumber * columnCount

2x3网格最后一个索引的示例:

rowCount = 2
columnCount = 3
第 1 页
 c0 c1 c2
----------
|0 |1 |2 | r0
----------
|3 |4 |5 | r1
----------
第2页
 c0 c1 c2
----------
|6 |7 |8 | r0
----------
|9 |10|11| r1
----------

那时index = 5

pageSize = 2*3 = 6
index = 5 % 6 = 5
rowNumber = floor(5 / 3) = 1
columnNumber = 5 - 1 * 3 = 2

那时index = 11

pageSize = 6 (as above)
index = 11 % 6 = 5
rowNumber = 1 (as above)
columnNumber = 2 (as above)
于 2013-09-26T15:38:54.593 回答