思考某个游戏的实现的时候,想到了一个将一维数组的方阵旋转90度的方案,比如原来2x2的4格阵列,左上角是1,旋转90之后,这个1被旋转到了左下角。最初的方案是找到方阵的中心,将两边的数组下标通过一个偏置值,变成“-1,0,1”这样的形式,实际实现过程中发现,单数行列的可以完美实现,但双数行列时中心的0轴上并没有数据,所以需要分为两种情况。
于是尝试从数组的左上角直接开始旋转的方式,发现也是可行的,比如图中右下角是原数组(虽然在下方y轴是负值,但忽略负号后,顺序可与双重循环内的模拟下标一致),将一维数组模拟为二维数组,可以利用两个循环嵌套来实现。
这里只简单实现了方形的数组的角度变换,以上图2x2的数组为例,数组在坐标轴上旋转90度后的下标变换如图,原来的x轴下标变为了y,而原来的y轴下标变为了“-y”。从数据上看,就是原来左上角为1,现在它的值变成了2,左上角对应的位置是原数组的第一行,如果将变换的坐标换算成1呢,利用图中的这个公式就可以了。因为这个旋转变换是规律的,所以这个公式适用于数组中的每一个单元格。
变换后原数组中的值就从“1,2,3,4”,变为了“2,4,1,3”。
为了让程序适应不同的方形阵列,这里定义了一块有参数的自定义积木,以适应不同尺寸的方形数组,对于异形数组博主暂未尝试上述程序是否可行。
测试程序定义了2个数据列表,原始列表用于储存原始数据,而90度列表则用于储存变换后的数据,变换完成后将原始数据全表更新为90度列表的数据。