我指的是在较旧的隔行视频技术中的隔行扫描,其中屏幕上的像素线将以每两行或每三行的交替模式呈现。 ( https://en.wikipedia.org/wiki/Interlaced_video有一个很好的过程动图)
所以如果你有你的行(1,2,3,4,.....99)
它们将按行(1,3,5,7......97,99,2,4,6,.....98)的顺序呈现(因子 2)
或(因子 3)作为行(1,4,7.....2,5,8.....3,6,9....)
我正在尝试编写一个脚本,该脚本将根据此模式使用 JSL 重新排序任意长度的序列,但我无法弄清楚如何构建索引来重新排序。 我目前正在尝试计算矩阵数学来实现这一点,但也许 for 循环会更智能/更容易?
// Create arbitrary sequence
a = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,21,22,23,24,25,26,27,28];
f = 3 // interlacing factor<BR />
//Start trying to work out an index or grouping for a future sorting op
b = mod(a+f-1),3);
//b = [0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2, 2, 0, 1, 2, 0, 1, 2, 0]<BR />
// ????
编辑:我不得不在末尾添加一个索引,以防止当因子没有平均划分行数时“重新开始”。
/////////////
你好,
查看 Shape() 命令。 随着移调,你可以得到你想要的——
Names Default To Here(1);
a = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,21,22,23,24,25,26,27,28];
fact = 3;
shape(shape(a, ceiling(nrow(a)/fact))`, 1)`[1::nrow(a)]
干杯,
布雷迪
这似乎得到了正确的矩阵(如果起始矩阵的构建方式不同,则可能需要转置)
Names Default To Here(1);
// Create arbitrary sequence
a = 1::30;
f = 3;
b = Mod(a+f-1,f);
m_interlaced = [];
For(i = 0, i <= f-1, i++,
m_interlaced = m_interlaced |/ a[Loc(b, i)];
);
show(m_interlaced);
Names Default To Here(1);
// Create arbitrary sequence
a = 1::99;
f = 2;
b = Mod(a+f-1,f);
m_interlaced = [];
For(i = 0, i <= f-1, i++,
m_interlaced = m_interlaced |/ a[Loc(b, i)];
);
show(m_interlaced);
在 JMP14 中,这将返回“参数应该是列表”,我相信指的是在 Loc 函数中调用 b 的位置。 我试图用 as list() 修改 b 但我不明白结果。
单独来说,|/ 做了什么,它与 concat 运算符 || 有什么关系?
a = 1::30;
f = 3;
b = as list(Mod(a+f-1,f));
m_interlaced = [];
For(i = 0, i <= f-1, i++,
m_interlaced = m_interlaced |/ a[Loc(b, i)];
);
show(m_interlaced);
/*:
m_interlaced = [](0, 1);