마우스를 캔버스 위에 올려 보이드를 흩어뜨린다
이 실험에 대해
Craig Reynolds가 1986년 고안한 Boids 알고리즘. 각 개체는 주변 반경 내 이웃만 인식하고, 세 가지 단순한 조향 규칙만 따른다. 분리(Separation)로 충돌을 피하고, 정렬(Alignment)로 이웃과 방향을 맞추고, 응집(Cohesion)으로 무리 중심으로 모인다. 전역 지시 없이 새 떼 같은 복잡한 집단 행동이 창발한다. 각 보이드의 색상은 진행 방향에 따라 변한다.
핵심 코드
// 세 가지 조향 힘 계산 (모든 이웃 순회)
for (const other of boids) {
const dist = distance(boid, other)
if (dist < PERCEPTION) {
// 분리: 너무 가까우면 멀어짐
if (dist < SEPARATION_DIST) {
sepX -= (other.x - boid.x) / dist
sepY -= (other.y - boid.y) / dist
}
// 정렬: 평균 속도 방향으로
aliVX += other.vx; aliVY += other.vy
// 응집: 평균 위치로
cohX += other.x; cohY += other.y
}
}
// 힘 적용 후 속도 제한
boid.vx += sep * SEP_WEIGHT + ali * ALI_WEIGHT + coh * COH_WEIGHT
;[boid.vx, boid.vy] = limit(boid.vx, boid.vy, MAX_SPEED)
// 경계 랩어라운드
if (boid.x < -10) boid.x = W + 10