Je fais référence à l'entrelacement comme dans les anciennes techniques vidéo entrelacées où les lignes de pixels sur votre écran seraient rendues selon un motif alterné toutes les secondes ou toutes les trois lignes. ( https://en.wikipedia.org/wiki/Interlaced_video a un bon gif du processus)
donc si vous avez vos lignes (1,2,3,4,.....99)
ils seraient rendus (facteur 2) dans l'ordre des lignes (1,3,5,7......97,99,2,4,6,.....98)
ou (facteur 3) sous forme de lignes (1,4,7.....2,5,8.....3,6,9....)
J'essaie d'écrire un script qui réorganisera une séquence de longueur arbitraire selon ce modèle avec JSL mais je n'arrive pas à comprendre comment créer un index pour réorganiser cela. J'essaie actuellement de travailler sur des mathématiques matricielles pour y parvenir, mais peut-être qu'une boucle for serait plus intelligente/plus 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 : j'ai dû ajouter un index à la fin pour empêcher le "redémarrage" lorsque le facteur ne divise pas uniformément le nombre de lignes.
/////////////
Salut,
Découvrez la commande Shape(). En plus de la transposition, vous pouvez obtenir ce que vous recherchez...
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)]
Acclamations,
Brady
Cela semble obtenir des matrices correctes (peut nécessiter une transposition si la matrice de départ est construite différemment)
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);
dans JMP14, cela renvoie "L'argument devrait être une liste", je pense que cela fait référence à l'endroit où b est appelé dans la fonction Loc. J'ai essayé de modifier b avec as list() mais je ne comprends pas le résultat.
séparément, que fait |/ et est-ce lié à l'opérateur 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);