Paso 2: Kinetic.js: agrupación de las estrellas
Aunque no es inmediatamente evidente, la galaxia no está dispuesta al azar.
Haga clic en una de las categorías de nivel superior, por ejemplo, y verás un anillo:
Zoom en un canal individual, y verás un apretado grupo de proyectos:
Los proyectos están agrupados por categorías y canales de Instructables. Los seis anillos de la categoría nivel superior emanan hacia afuera desde el centro del universo, y cada canal dentro de cada categoría obtiene un igual-sector del anillo. Esto resulta en una distribución "cluster" de las estrellas, ya que algunas categorías son más que otros, y algunos canales dentro de las categorías están más llenos que otros. Estos racimos son refleja el equilibrio de los proyectos en categorías y canales de Instructables y proporcionan cierta estética.
El código que hace que esto suceda fue escrito en KineticJS, aunque podría haber sido escrito en JavaScript llano, transformación o cualquier otra cosa. Asigna un anillo a cada una de las seis categorías y un punto al azar (cero a 2 * pi) a lo largo de ese anillo que sirve como el punto central para cada canal. Esto se hace con las funciones trigonométricas básicas: x = r*cos(theta) y y = r * sin(theta) donde están (radio) se deriva del anillo en el que reside cada proyecto, y theta se deriva desde el"centro" de cada canal. Como se procesan los proyectos, cinética crea una capa nueva para el canal (si es necesario) y agrega el proyecto a esa capa. La capa se agrega a la capa de la categoría, y todas las capas se añaden al escenario. Cinética facilita contraer todos estos números a coordenadas XY de mundo, razón por la cual el código no fue reescrito nunca cuando el proyecto se trasladó a Three.js. Cada proyecto recibe una z al azar, dentro de un rango estrecho.
Quizás la parte más interesante es crear una distribución gaussiana, en lugar de dispersión al azar alrededor de estos puntos centrales:
Este truco útil proporcionada por peces de protones. Si tienes un objetivo media y desviación estándar para cualquier tipo de distribución normal que intenta generar, una aproximación cerca práctica es añadir randoms uniforme tres juntos.