II
Size: a a a
II
II
A
A
II
A
A
WA
WA
A
WA
A
AM
AM
x_size, y_size = 320, 240 # Размеры изображенияСамо моделирование заняло около 20 строк.
x1, y1 = x_size // 5, y_size // 2 # Исходная точка
x2, y2 = 4 * x_size // 5, y_size // 2 # Конечная точка
force = 6 # Коэффициент масштаба процесса
# Моделирование влияния электрического поля на лидер молнии
def field_influence(coordinate, target, force):
if coordinate < target:
coordinate += random.randint(- 1 * force, + 3 * force)
elif coordinate > target:
coordinate += random.randint(- 4 * force, + 1 * force)
else:
coordinate += random.randint(- 2 * force, 2 * force)
return coordinate
# Моделирование молнии
def new_light():
# Выпускаем очередной лидер молнии
x, y, light = x1, y1, [(x1, y1)]
while abs(x - x2) > force or abs(y - y2) > force:
# Воздействуем на лидер электрическим полем конечной точки с флуктуациями
x = field_influence(x, x2, force)
y = field_influence(y, y2, force)
# Возникло самопересечение, это не имеет физического смысла
if (x, y) in light:
# Начинаем сначала
x, y, light = x1, y1, [(x1, y1)]
continue
# Разряд слишком длинный, он затух
if len(light) > x_size * force:
# Начинаем сначала
x, y, light = x1, y1, [(x1, y1)]
continue
# Сохраняем очередной шаг
light.append((x, y))
# Молния достигла конечной точки
return light
AM
D
AM