Mi riferisco all'interlacciamento come nelle vecchie tecniche video interlacciate in cui le linee di pixel sullo schermo verrebbero visualizzate in uno schema alternato di ogni secondo o ogni terza riga. ( https://en.wikipedia.org/wiki/Interlaced_video ha una buona gif del processo)
quindi se hai le tue righe (1,2,3,4,.....99)
verrebbero resi (fattore 2) nelle righe dell'ordine (1,3,5,7......97,99,2,4,6,.....98)
o (fattore 3) come righe (1,4,7.....2,5,8.....3,6,9....)
Sto cercando di scrivere uno script che riordina una sequenza di lunghezza arbitraria secondo questo schema con JSL, ma non riesco a capire come creare un indice per riordinarlo. Attualmente sto cercando di elaborare la matematica della matrice per ottenere questo risultato, ma forse un ciclo for sarebbe più intelligente/più facile?
// 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 />
// ????
EDIT: ho dovuto aggiungere un indice alla fine per evitare il "riavvio" quando il fattore non divide equamente il numero di righe.
/////////////
Ciao,
Dai un'occhiata al comando Shape(). Oltre alla trasposizione, puoi ottenere ciò che cerchi...
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)]
Saluti,
Brady
Questo sembra ottenere matrici corrette (potrebbe richiedere la trasposizione se la matrice di partenza è costruita in modo diverso)
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);
in JMP14 questo restituisce "L'argomento dovrebbe essere elenco" credo che si riferisca a dove b viene chiamato nella funzione Loc. Ho provato a modificare b con as list() ma non capisco il risultato.
separatamente, cosa fa |/ ed è correlato all'operatore 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);