Задать вопрос
@shinodaaa

Как сделать смещение точек?

Написал код, который создает звезды, теперь мне нужно его дополнить, чтобы они пока длится цикл сдвигались в углы с каждым новым действием цикла, но не понимаю как это сделать
import turtle
import random as rnd
import time 

def starFILL(n, dlina):
    main.begin_fill()
    if n % 2 != 0:
     for i in range(n):
          main.forward(dlina)
          angle = n // 2 * 360 / n
          main.left(angle)
    main.end_fill()

window = turtle.Screen()
window.bgcolor('black')
window.setup(1920, 1080)

main = turtle.Turtle()
main.speed(0)
main.color('yellow')
for i in range(100000):
    x = rnd.randint(-1500, 1500)
    y = rnd.randint(-700, 1080)
    main.up()
    main.setposition(x + 5,y + 5)
    main.down()
    size = rnd.randint(5, 20)
    vershina = rnd.choice([5,7,9,11,13,15,17])
    starFILL(vershina, size)   
time.sleep(5)
  • Вопрос задан
  • 114 просмотров
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 1
Vindicar
@Vindicar
RTFM!
Если ты хочешь сделать "взрыв", т.е. разлёт звёзд из центра, то тебе нужно будет с умом представить сведения о звёздах. Сейчас ты их не хранишь вообще, поэтому у тебя каждый раз звёзды рисуются по разному.
Что нужно знать для разлёта?
1. Координаты центра, откуда идёт разлёт. Я полагаю, это будет
center = (0, 0)
Надеюсь, ты знаешь что такое кортеж.
2. Для каждой звезды нужно знать число её лучей. Также для каждой звезды нужно определить шаг по x и по y. Например, так.
dx = rnd.randint(-5, 5)
dy = rnd.randint(-5, 5)
n_beam = rnd.choice([5,7,9,11,13,15,17])
size = rnd.randint(5, 20)
star = (dx, dy, n_beam, size)
У тебя будет список из множества таких кортежей star.
4. Мы должны знать, сколько шагов мы сделали с момента начала анимации.
step_count = 0
Поначалу 0, потом будет увеличивать.

Сначала генерируешь звёзды.
center = (0, 0)
N = 1000
stars = []
for i in range(N):
    dx = rnd.randint(-5, 5) #на сколько пикселей по горизонтали сдвинется звезда за шаг
    dy = rnd.randint(-5, 5) #на сколько пикселей по вертикали сдвинется звезда за шаг
    n_beam = rnd.choice([5,7,9,11,13,15,17]) #сколько лучей у звезды
    size = rnd.randint(5, 20) #размер звезды
    star = (dx, dy, n_beam, size) #описание звезды
    stars.append(star) #добавляем звезду в массив звёзд


Потом делашеь цикл анимации:
for step in range(100): #сколько кадров анимации сделать
    turtle.clear() #тут нужно очистить экран
    for star in stars: #перебираем звезды
        # определяем координаты центра звезды на этом шаге
        pos_x = center[0] + step * star[0]
        pos_y = center[1] + step * star[1]
        # позиционируем черепашку
        main.up()
        main.setposition(x + 5,y + 5)
        main.down()
        # рисуем звезду
        starFILL(star[1], star[2])
    time.sleep(1.0)


Как-то так. Более аккуратно было бы использовать не кортежи, а классы. Если интересно, отпишись в комментах, объясню.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы