소개
Boids 알고리즘 그룹의 발적 행동의 비교적 간단한 데모입니다. 제작자 Craig Reynolds가 설명하는 세 가지 주요 규칙이 있습니다.
기본 플록 킹 모델은 세 가지 간단한 조향 동작으로 구성되며, 주변 플록 메이트의 위치와 속도에 따라 개별 보이드가 어떻게 기동하는지 설명합니다.
- 분리 : 지역 무리 무리가 몰리지 않도록 조향하십시오.
- 정렬 : 현지 무리의 평균 방향으로 조정합니다.
- 응집력 : 지역 무리 무리의 평균 위치를 향해 움직입니다.
각 보이드는 전체 장면의 기하학적 설명에 직접 액세스 할 수 있지만, 무리를 짓기 위해서는 주변의 특정 지역에있는 무리에게만 반응해야합니다. 이웃은 거리 (보이드의 중심에서 측정)와 각도로 특징 지어 집니다 보이드의 비행 방향으로부터 으로한다. 이 지역 주변의 무리는 무시됩니다. 이 동네는 한정된 지각의 모델로 여겨 질 수 있지만 (어렴 한 물에서 물고기에 의해), 무리가 보이드 스티어링에 영향을 미치는 영역을 정의하는 것으로 생각하는 것이 더 낫습니다.
설명 할 때 완벽하지 않으므로 소스를 확인하는 것이 좋습니다. . 그는 또한 그의 사이트에 매우 유익한 사진을 가지고 있습니다.
도전
보이드 수 (시뮬레이션 된 엔티티)와 프레임 수를 고려하여 시뮬레이션의 애니메이션을 출력합니다.
- 구멍은 빨간색 원으로 렌더되어야하며, 원 안에 선이 머리글을 나타내는 방향으로 표시되어야합니다.
- 각 구멍의 각도 (레이놀즈에 의해 기술 된 바와 같이)는 최대 300도 여야합니다. (360 아님)
- 각 보이드의 시작 방향과 위치는 위치뿐만 아니라 균일하게 무작위이어야합니다 (그러나 출력은 여전히 결정되도록 시드됩니다).
- 보이드의 반경이 1이면 이웃의 반경이 3이어야합니다.
- 보이드의 수는 2-20 사이입니다.
- 프레임 수는 1-5000 사이입니다.
- 애니메이션은 프레임 당 최소 10 밀리 초, 보이드 수의 최대 1 초로 재생되어야합니다. (2 보이드 = 프레임 최대 2 초, 3 보이드 = 프레임 최대 3 초 등)
- 출력 애니메이션은 보이드 수의 절반에 5 곱하기 5 곱하기 반지름을 곱한 것이어야합니다. 따라서, 2 개의 보이드의 최소 크기는 10 보이드 반경 x 10 보이드 반경이고, 3 개의 보이드의 최소 크기는 15 보이드 반경 x 15 보이드 반경입니다.
- 각 보이드의 반경은 최소 5 픽셀, 최대 50 픽셀이어야합니다.
- 각 보이드의 속도는 한 프레임에서 반경의 1/5 이상 이동하지 않도록 제한해야합니다.
- 여러 번 실행하는 경우 동일한 입력이 동일한 출력을 생성하도록 출력을 결정해야합니다.
- 구멍이 경계에 도달하면 반대쪽으로 다시 감싸 야합니다. 마찬가지로, 각 보이드 주변은 또한 테두리를 감싸 야합니다.
알고리즘 규칙
이 경우, 각 보이드는 보이드의 방향을 중심으로 300도에 걸쳐 섹터를 가지고 있습니다. 이 "이웃"에있는 다른 모든 보이드는 "이웃"또는 (레이놀즈의 용어를 사용하기 위해) "사냥개"로 간주됩니다.
각 보이드는 충돌을 피하고 인접 보이드와 하나의 보이드 반경이 편안한 거리를 유지하도록 방향을 조정해야합니다. (이것은 알고리즘의 "분리"측면입니다. 하나의 구멍 반경은 우회 될 수 있지만, 제자리로 돌아가는 고무 밴드와 같아야합니다.)
각 보이드는 첫 번째 규칙을 방해하지 않는 한 이웃의 다른 보이드의 평균 헤딩에 더 근접하도록 헤딩을 추가로 조정해야합니다. (이것은 알고리즘의 "정렬"측면입니다)
충돌이 발생하지 않거나 두 번째 규칙을 크게 방해하지 않는 한 각 보이드는 플록 메이트의 평균 위치를 향해 회전해야합니다.
에서 주제에 자신의 논문 은 다음과 같이, 그는이 설명 :
시뮬레이션 된 무리를 만들기 위해 기하학적 비행을 지원하는 보이드 모델로 시작합니다. 우리는 충돌 회피의 반대 세력과 무리에 합류하려는 충동에 해당하는 행동을 추가합니다. 간단히 규칙으로 말하고 우선 순위를 낮추는 순서로 시뮬레이션 된 무리를 일으키는 동작은 다음과 같습니다.
- 충돌 방지 : 근처의 무리와 충돌 방지
- Velocity Matching : 주변 무리와 속도를 맞추려고 시도
- 무리 센터링 : 근처 무리 무리와 가까이 있으십시오
움직임에 대한 자세한 설명 :
- Boids 알고리즘의 표준 구현은 일반적으로 각 규칙에 대한 계산을 수행하고이를 병합합니다.
- 첫 번째 규칙의 경우, 보이드는 주변의 이웃 보이드 목록을 통과하며, 자신과 이웃 사이의 거리가 특정 값보다 작은 경우, 보이드를 멀어 지도록 밀어내는 벡터가 보이드의 제목에 적용됩니다.
- 두 번째 규칙의 경우, boid는 이웃의 평균 머리글을 계산하고 현재 머리글과 현재 머리글의 평균 머리글 사이의 차이의 작은 부분 (이 과제에서는 1/10을 사용함)을 추가합니다.
- 세 번째이자 마지막 규칙의 경우, 보이드는 이웃의 위치를 평균화하고이 위치를 가리키는 벡터를 계산합니다. 이 벡터는 규칙 2에 사용 된 것 (이 챌린지에 1/50이 사용됨)보다 훨씬 적은 수를 곱하여 제목에 적용됩니다.
- 보이드는 다음 방향으로 이동
여기Boids 알고리즘의 유용한 의사 코드 구현은 .
입력 및 출력 예
입력:산출:5, 190 (5 개, 190 개 프레임)
승리 기준
이것은 code-golf 이므로 바이트 단위의 가장 작은 솔루션이 이깁니다.