1)我试图同时将数组的(外部单元)第一次也是最后一次单元格向内移动。下面是我尝试使用数组内向动画所做工作的内部动画。正如你所看到的,外部细胞同时向内移动(从末端)。
这是一张图片,但动画显示的效果要好得多,请注意数组中可能有偶数或奇数的单元格
Inner rotation steps
1 2 3 4 5 6 7
4 1 2 3 6 7 5
3 4 1 2 7 5 6
2)我试图同时使用圆环移位(我认为是最快的)将数组的中间单元向外移动。这是一个外向的动画,我要做的也是外向动画。正如你所看到的,信号的中央同时向外(左和右)移动。
这是一张图片,但动画显示的效果要好得多,请注意数组中可能有偶数或奇数的单元格
Outer rotation steps
1 2 3 4 5 6 7
2 3 4 1 7 5 6
3 4 1 2 6 5 7
Example: inward
a = (1:7)
y=circshift(A,[0 -2]) %shift end of array inward
3 4 5 6 7 1 2
a = (1:7)
y=circshift(A,[0 2]) %shift beginning of array inward
6 7 1 2 3 4 5
不确定如何利用圆圈向外移动中间细胞,或外部细胞同时向内移动。
我不知道如何从中心开始旋转,并将数组向外/向内移动以获得这种效果。
请注意,我不是想得到这个方程,我只是想让数组以同样的方式移动。我使用的是倍频程3.8.1,它与matlab兼容。
发布于 2014-11-06 16:35:16
A = 1:7;
split = ceil(numel(A)/2);
n = 2;
A(1:split) = circshift(A(1:split), [0, n]);
A(split+1:end) = circshift(A(split+1:end), [0, -n]);
如果你愿意的话,把最后三行放在一个循环中。也只需将n
的符号更改为向内或向外
发布于 2014-11-06 16:35:47
不如构建新的索引,而不是使用circshift:
A = 1:7;
halfLen = ceil(length(A)/2); % or use ceil to
idcsOutward = [2:halfLen,1,length(A),(halfLen+1):(length(A)-1)];
B1 = A(idcsOutward)
B2 = B1(idcsOutward)
% and inward:
idcsInward = [halfLen,1:(halfLen-1),(halfLen+2):length(A),halfLen+1];
C1 = A(idcsInward)
C2 = C1(idcsInward)
结果是:
B1 =
2 3 4 1 7 5 6
B2 =
3 4 1 2 6 7 5
C1 =
4 1 2 3 6 7 5
C2 =
3 4 1 2 7 5 6
https://stackoverflow.com/questions/26782743
复制相似问题