我正在尝试创建一个可缩放的图片拼图(like this),但无法找出用于覆盖超过3x3和4x4的等式。我根据我想要添加的图块数量动态生成拼图(例如,对于3x3为8,对于4x4为15)。
到目前为止,为了生成行,我只需将tile编号除以行/列号。
困难的部分是做列。
以下是我使用过的柱式公式:
A = Tile Number Index (Start at 0 and end at 8 for 3x3)
B = Row/Col (3 for 3x3)
//A and B are both ints to start. The final divide B/() I convert to float
and then use a rounding to get the final number
(B/((A/B+1)*B-A))-1
此等式仅适用于3x3拼图。我有4x4的另一个等式,但它根本没有比例。我该如何解决这个问题并使所有更大的难题扩大规模。
答案 0 :(得分:1)
我假设您正在处理8或15个拼图(如在链接中),您想要找到拼图解决时拼贴结束的行和列,以及拼贴编号,行和列一切都从零开始。 (这是我从你上次评论和上次编辑中收集到的内容。)如果是这样,你可以在Python中使用
def tile_end_coords(tilenum):
'''Return the row and column coordinates for the end (solved) tile given
its number. Global variable *n* is the number of squares on each side
of the square puzzle.'''
row = tilenum // n
col = tilenum % n
return row, col
row
的表达式是整数除法后的商。某些语言(如Object Pascal)使用div
而不是//
。在某些语言中,您需要使用int(tilenum / n)
。
col
的表达式是整数除法后的余数。某些语言(如Object Pascal)使用mod
而不是%
。在某些语言中,您需要使用tilenum - row * n
。
我向您展示了一些易于理解,更易于移植的代码。在Python中,您只需用一行替换整个函数:
row, col = divmod(tilenum, n)
如果图块编号,行或列是基于一个而不是从零开始,只需在适当的位置添加或减去1
- 应该清楚在哪里。