【发布时间】:2011-10-20 12:17:01
【问题描述】:
所以我有一个具有以下理论值的数组:
int[] elements = {A1, A2, B1, B2,
A3, A4, B3, B4,
C1, C2, D1, D2,
C3, C4, D3, D4};
图解:
+ - + - + - + - +
| A | A | B | B |
+ - + - + - + - +
| A | A | B | B |
+ - + - + - + - +
| C | C | D | D |
+ - + - + - + - +
| C | C | D | D |
+ - + - + - + - +
简单地说我想把数组重新排列成下面的形式:
int[] elements = {A1, A2, A3, A4,
B1, B2, B3, B4,
C1, C2, C3, C4,
D1, D2, D3, D4};
图解:
+ - + - + - + - +
| A | A | A | A |
+ - + - + - + - +
| B | B | B | B |
+ - + - + - + - +
| C | C | C | C |
+ - + - + - + - +
| D | D | D | D |
+ - + - + - + - +
这个特定示例包含四个扇区(A、B、C 和 D),但无论数组包含多少扇区,以及每个扇区包含多少元素,我需要的算法都应该适用。
每个扇区的大小是已知的(扇区宽度和扇区高度)以及扇区的数量(行和列)。 所有扇区的大小(宽度和高度)完全相同。扇区的数量必须描述为两个值(行和列),然后将它们相乘以构成扇区的实际总和。例如。如果需要 5 个扇区,则可以指定 1 行 5 列。
下面是一个执行这种方法的示例:
public int[] sectorSort(int[] elements,
int sectorWidth,
int sectorHeight,
int columns,
int rows);
其他扇区设置示例:
Columns: 5
+ - + - + - + - + - + - + - + - + - + - +
| A | A | B | B | C | C | D | D | E | E |
Rows: 1 + - + - + - + - + - + - + - + - + - + - +
| A | A | B | B | C | C | D | D | E | E |
+ - + - + - + - + - + - + - + - + - + - +
Columns: 2
+ - + - + - + - +
| A | A | B | B |
+ - + - + - + - +
| A | A | B | B |
+ - + - + - + - +
| C | C | D | D |
Rows: 3 + - + - + - + - +
| C | C | D | D |
+ - + - + - + - +
| E | E | F | F |
+ - + - + - + - +
| E | E | F | F |
+ - + - + - + - +
我计划使用它为我正在制作的游戏引擎制作一个高效的精灵地图类。数组中的元素是 ARGB 颜色值,扇区是单独的精灵。如果不同的 sprite 按后一种顺序排列,那么搜索单个 sprite 会更快并且内存效率更高。
谢谢!
EDIT1:清晰度。
EDIT2:添加了更多条件和说明。
【问题讨论】:
-
是否保证所有扇区大小相同?
-
能否请您添加 5 个扇区的示例,因为我无法想象超过 4 个扇区的情况。
-
@Ralph:我可以看到平方数在我脑海中的样子(4、9、16),但我无法可靠地想象其他任何东西......如果它是 6,它是否设置在3x2 还是 2x3 配置?
-
好吧,我忘记了一些条件。我现在正在添加它们。谢谢!
-
您要重新排列现有数组,还是返回一个已排列内容的新数组?