<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Vernice spray è stato un pessimo tentativo di comportamento di floccaggio.Penso che la parte che mi mancava fosse l'allineamento, che http://gamedevelopment.tutsplus.com/tutorials/the-tre-simple-rules-of-flocking-behaviors-alignment-cohesion-and-separa… mi ha guidato verso.Ecco un nuovo video.
Chance Of Dragons - YouTube

Ed ecco il JSL per creare le bitmap (di nuovo, nessuna scusa... dovrai rimuovere il vicinato e il calcolo vicino dalla funzione di iterazione se vuoi giocare con i cursori.Questo è il JSL finale che è stato eseguito per diverse ore per creare tutte le bitmap, non il JSL iniziale quando stavo cercando di trovare alcuni valori di parametri che avrebbero prodotto risultati interessanti.)
// idee prese in prestito da
// http://gamedevelopment.tutsplus.com/tutorials/the-tre-simple-rules-of-flocking-behaviors-alignment-cohesion-and-separation--gamedev-3444
quartiere = 2; // raggio del quartiere vicino
vicino=20; // numero di vicini da trovare nel quartiere
a=0,04;b=0,08;c=0,2;
w=.8;//1-w è tirare al centro
velocità=8;//più piccolo è più veloce
x = 1;
y = 2;
dx = 3;
dy = 4;
colore=5;
nvar = 5;
nflock = 1700;
stormo = J( nstormo, nvar, . );
// imposta le posizioni iniziali da 10 a 90 e le velocità iniziali inferiori a 1
Assegnazione parallela(
{x = x, y = y, dx = dx, dy = dy, nflock = nflock, colore=colore},
stormo[i, v] = Se( v < dx,
100*(i+100)/(nflock+200),//Intero casuale( 10, 90 ),
if(v
)
);
cornice = 0;
iterare = Funzione( {},
{temp = gregge, iflock, irow, kdt = KDTable( gregge[0, 1 :: 2]), dxsum, disum, xsum, ysum, myx, myy, xdif, ydif, neighbor, nneighbors, len},
nnear = 10*(1.1+sin(fotogramma/2000)); // da uno a venti vicini più prossimi
quartiere = 1*(1+cos(frame/3000)); // quartiere da zero a due
{righe, dist} = kdt << KNearestRows( {nnear, neighbor} );
cornice++;
For( iflock = 1, iflock <= nflock, iflock++,
myx = temp[iflock, x];
mia = temp[iflock, y];
somma dx = 0;
disum = 0; // somma delle velocità dei vicini
somma x = 0;
somma y = 0; // somma delle posizioni dei vicini
xdif = 0;
ydif = 0; // somma delle distanze dei vicini
vicini = 0;
For( irow = 1, irow <= nnear & (neighbor = rows[iflock, irow]) != 0, irow++,
vicini++;
dxsum += temp[vicino, dx];
disum += temp[vicino, dy];
se(1,
xsum += temp[vicino, x];
somma y += temp[vicino, y];
se(1,
xdif += (myx - temp[vicino, x]); // vettore lontano dal vicino
ydif += (mio - temp[vicino, y]);
))
);
len = Sqrt( somma dx * somma dx + somma * disum );
Se( lunghezza!= 0,
dxsum /= lente; // questo fa sì che la velocità diventi 1, nella direzione del gruppo
disum /= lente;
,
somma dx = 0;
disum = 0;
);
Se (vicini,
xc = 50+40*sin((scegli(1+mod(iflock,3),3,5,7)*frame)/2207);
yc = 50+40*cos((scegli(1+mod(iflock,3),11,13,17)*frame)/3067);
sommax = ((1-w)*xc+(w*(sommax) / (nnevicini))) - myx; // questo vettore fornisce la direzione al centro del gruppo
somma y = ((1-w)*yc+(w*(somma y) / (nnevicini))) - mia;
len = Sqrt( somma x * somma x + somma y * somma y );
if(len!=0,xsum/=len;ysum/=len,xsum=0;ysum=0);// normalizzato a 1
len = Quadrato( xdif * xdif + ydif * ydif );
if(lente!=0,xdif/=lente;ydif/=lente,xdif=0;ydif=0); // normalizzato a 1
,
somma x = 0;
somma y = 0;
xdif = 0;
ydif = 0;
);
stormo[iflock, dx] += a*dxsum + b*xsum + c*xdif;
if( abs(gregge[iflock, dx])>1, gregge[iflock, dx]*=.9);
stormo[iflock, x] += stormo[iflock, dx]/velocità;
if((gregge[iflock, x] < -5 & gregge[iflock, dx] < 0)|(gregge[iflock, x] >105 & gregge[iflock, dx] > 0), gregge[iflock, dx] = - stormo[iflock, dx]);
stormo[iflock, dy] += a*dysum + b*ysum + c*ydif;
if( abs(gregge[iflock, dy])>1, gregge[iflock, dy]*=.9);
stormo[iflock, y] += stormo[iflock, dy]/velocità;
if((gregge[iflock, y] < -5 & gregge[iflock, dy] < 0)|(gregge[iflock, y] >105 & stormo[iflock, dy] > 0), gregge[iflock, dy] = - gregge[iflock, dy]);
stormo[seblocco,colore]=colorecalore((nnevicini)/(nnevicino),"spettrale");//colorecalore((nnevicini-1)/(nnevicini+10),"getto");//3+nnevicini;/ /hlscolor(.4-.6*(nnevicini)/(nnevicino),.5,1);//
);
);
iterare();
Nuova finestra( "Flocco",
Casella di riepilogo V(
gb = Riquadro grafico(
soppressori,
dimensione del fotogramma (1922, 1082),
<
Dimensione penna (3);
For( i = 1, i <= nflock, i++,
Colore penna (flock[i, colore]);
Linea( {gregge[i, x] - gregge[i, dx], gregge[i, y] - gregge[i, dy]}, {gregge[i, x], gregge[i, y]} );
);
),
Casella di riepilogo H(
Casella di testo ("Allineamento"),
Casella di scorrimento( 0, .16, a ),
Casella di testo ("Coesione"),
Casella di scorrimento( 0, .2, b ),
Casella di testo ("Separazione"),
Casella di scorrimento( 0, .4, c ),
Casella di testo ("Quartiere"),
Slider Box (0, 30, quartiere),
,
Casella di testo ("NVicino"),
Casella di scorrimento (1, 30, vicino),
Casella di testo ("Velocità"),
Scatola di scorrimento (0,5, 30, velocità)
)
)
);
While( fotogramma<=27000,
gb << inval;
gb <
Aspetta(0);
temp=gb[framebox(1)]<
pixel=temp<
pixel=pixel[3::1082,3::1922];
temperatura<
temp<
iterare();
);