
Flock 알고리즘의 3가지 핵심 규칙은 다음과 같습니다.
1. Separation: 다른 bird와의 거리를 유지하는 규칙입니다. bird가 다른 bird와 너무 가까이하면 bird는 그 bird를 피하고, 너무 멀어지면 다시 그 bird와 가까이 하도록 합니다. 이 규칙을 구현하는 방법은 bird의 위치와 다른 bird의 위치를 비교하여 거리를 계산하고, 거리가 너무 가까이거나 멀면 bird의 위치를 조정하는 것입니다.
2. Alignment: 다른 bird의 방향을 따라하는 규칙입니다. bird가 다른 bird와의 방향이 다르면 bird는 그 bird의 방향을 따라가도록 합니다. 이 규칙을 구현하는 방법은 bird의 방향과 다른 bird의 방향을 비교하여, bird의 방향을 그 bird의 방향으로 조정하는 것입니다.
3. Cohesion: 같은 flock에 있는 다른 bird와 함께 움직이는 규칙입니다. bird가 다른 bird와의 거리가 멀면 bird는 그 bird와 함께 움직이도록 합니다. 이 규칙을 구현하는 방법은 bird의 위치와 다른 bird의 위치를 비교하여 거리를 계산하고, 거리가 너무 멀면 bird의 위치를 조정하여 그 bird와 가까이 하도록 합니다.
이러한 규칙을 구현하는 방법은 다음과 같습니다.
- bird의 위치, 방향, 속도를 저장하는 변수를 선언합니다.
- bird가 다른 bird와의 거리를 계산하고, 거리가 너무 가까이거나 멀면 bird의 위치를 조정합니다.
- bird가 다른 bird의 방향을 따라가도록 bird의 방향을 조정합니다.
- bird가 같은 flock에 있는 다른 bird와 함께 움직이도록 bird의 위치를 조정합니다.
이러한 규칙을 구현하는 코드는 다음과 같습니다.
#hostingforum.kr
python
import math
class Bird:
def __init__(self, x, y):
self.x = x
self.y = y
self.vx = 0
self.vy = 0
def update(self, birds):
# Separation
for bird in birds:
if bird != self:
dx = bird.x - self.x
dy = bird.y - self.y
dist = math.sqrt(dx2 + dy2)
if dist < 10:
self.vx += dx / dist * 0.1
self.vy += dy / dist * 0.1
# Alignment
avg_vx = 0
avg_vy = 0
count = 0
for bird in birds:
if bird != self:
avg_vx += bird.vx
avg_vy += bird.vy
count += 1
if count > 0:
avg_vx /= count
avg_vy /= count
self.vx += (avg_vx - self.vx) * 0.1
self.vy += (avg_vy - self.vy) * 0.1
# Cohesion
avg_x = 0
avg_y = 0
count = 0
for bird in birds:
if bird != self:
avg_x += bird.x
avg_y += bird.y
count += 1
if count > 0:
avg_x /= count
avg_y /= count
self.vx += (avg_x - self.x) * 0.01
self.vy += (avg_y - self.y) * 0.01
self.x += self.vx
self.y += self.vy
이 코드는 bird가 다른 bird와의 거리를 유지하고, 다른 bird의 방향을 따라가고, 같은 flock에 있는 다른 bird와 함께 움직이는 규칙을 구현합니다.
2025-08-11 23:43