Рубрики
Без рубрики

Использование Python, чтобы сделать искусство с математикой

Учебное пособие по созданию искусства с использованием рекаминанской последовательности, удивительно сложная целочисленная последовательность, построенная с некоторыми простыми правилами. Теги с математикой, питоном, искусством, генеративными.

Первоначально опубликовано Простой программист .

Математика может быть пугающим.

В зависимости от учителя и того, как его преподают, это может быть бесконечное сочетание непостижимых и скучных.

Но есть красота для математики – симметрия для интеллекта и логики позади номеров. Я люблю математику, и я хочу, чтобы другие люди любили это тоже.

Один аккуратный способ сделать математику более доступен и показать свою красоту визуально сочетать его с чем-то под названием « Генеративное искусство . «Генеративное искусство – это то, где вы создаете несколько, обычно простые правила, которые часто на основе математики или геометрии, а затем вы говорите компьютер для обработки этих правил.

Поскольку компьютеры быстро отлично подходят для обработки инструкций, и в гораздо большем масштабе, чем человеческие, которые создаются конструкции, часто являются более сложными и интересными, чем вы можете ожидать от таких простых правил.

Этот пример Показывает кучу плавающих частиц, которые движутся с зажимающим естественным движением. Они плавают вокруг, связываются с другими частицами и меняют направления все самостоятельно. Это вариация на «алгоритм флокинга», и удивительная вещь заключается в том, что большая часть этого естественного движения происходит просто наличие каждая частица, следуя правилам «не попадайте в кого-либо», «остаться со стадом» и «иди примерно в том же направлении, что и те, кто рядом с вами.

Python является отличным вариантом создания этих генеративных художественных проектов; Он используется учеными, математиками и инженерами данных (среди многих других) в качестве опции открытого исходного кода для обработки численных расчетов и генерации визуализации.

Это также чрезвычайно легко читать и писать четкий код, что делает его идеальным языком для изложения простых правил, необходимых для создания этого генеративного искусства.

Одной из самых простых математических конструкций, которые вы можете создать с этими правилами, является целочисленная последовательность , который является упорядоченным списком целых чисел (целые числа, в том числе: положительный, отрицательный и нулевой). Обычно взаимосвязь между этими целыми числами прописана в каком-то логическом способе с набором правил, чтобы помочь кому-то выяснить, что находится следующий номер в шаблоне.

В этой статье мы собираемся взять математику целочисленных последовательностей, подчеркивают их мощью программирования в Python и использовать их для создания некоторого интересного и красивого генеративного искусства.

Это забавное упражнение, а вычисления и образцы кода достаточно просты, чтобы они должны участвовать для программистов, математиков и художников.

Это не артикул Python для начинающих, поэтому я предполагаю, что у вас есть некоторое знакомство с синтаксисом Python – или, по крайней мере, готовность забрать его, как вы идете вместе, а также как запустить программы Python. Если вы не уверены, как запустить их, и вы хотите написать код в приложении с большой гигантской кнопкой «Play», MU Text Editor отлично подходит для начинающих.

Особая последовательность я хочу поговорить об этом времени, это Recamán последовательность Отказ Правила обманчиво просты, но когда числа приведены визуальной или слуховой формы, результаты могут быть интересными и даже немного жуткими.

Рекамена последовательности

Вот правила:

  1. Начать с нуля.
  2. Каждый шаг, который вы принимаете, будет 1 больше, чем последний шаг, который вы взяли.
  3. Если можно сделать шаг назад (отрицательно), сделайте это. В противном случае шаг вперед.
  4. Обратные шаги разрешены только в том случае, если результирующее местоположение положительное (больше нуля), и если мы никогда не были в этом номере раньше.

Давайте сделаем первые несколько в качестве примеров.

Мы начинаем с нуля.

  • 0

Следующий размер шага будет 1. Степень назад поставит нас на -1, что не допускается, поэтому мы выйдем вперед.

  • 0 -> 1

Следующий размер шага 2. Степень назад положил бы нам на -1. Это все еще не разрешено, поэтому вперед, мы должны идти.

  • 0 -> 1 -> 3

Следующий размер шага 3. Степень отстаивает нас на 0. Так как мы уже были до 0 (Наша первая отправная точка), это не действительный ход. Я обещаю, что последовательность скоро станет интересной, но на данный момент мы наступаем вперед.

  • 0 -> 1 -> 3 -> 6

Следующий размер шага 4. Степень назад приземляется на нас в 2. С 2 положительна, и мы еще не видели его, мы можем взять наш первый законный шаг назад!

  • 0 -> 1 -> 3 -> 6 -> 2

Надеюсь, вы начинаете видеть, как работают правила. Теперь это интересно подумать, но я не уверен, что позвонил в список пяти номеров. Вот где мы наклоняемся немного сложнее по искусству и коду. К счастью, Python предоставляет нам оба для нас в веселом и очаровательном модуле в своей стандартной библиотеке: Черепаха Отказ

Представляя черепаху графики

Графика черепахи изначально была Ключевая особенность языка программирования логотипа .

Это относительно простые удельных доменных языков (DSL), где есть аватар-традиционно в форме черепахи на экране, и вы даете ему инструкции, где идти: вперед, слева или справа. Как он движется, он рисует линию, где бы он ни шел с его хвостом, хотя вы можете сказать, чтобы он поднимал его хвостом или положить его по мере необходимости. Это может даже прыгать по позициям и менять цвета!

Python также включает в себя библиотеку «черепахи», упакованную вместе с ней в своей стандартной библиотеке. Давайте посмотрим на образец программы, чтобы увидеть, как она работает. Создайте файл под названием «example1.py» со следующим содержимым.

import turtle

window = turtle.Screen()
joe = turtle.Turtle()

joe.forward(50)
joe.left(90)
joe.forward(100)

turtle.done()

Вот важные биты:

  • В строке 1 мы импортируем модуль «черепаха». У этого будет много функций, которые мы собираемся использовать, и мы не могли их использовать, если мы сначала импортируем модуль. Мы будем использовать эти функции, написав «Turtle.Function_Name», как вы увидите.
  • В строке 3 мы создаем окно. Это окно, которое будет всплыть, когда вы запустите свой код. Он держит все вещи, которые мы собираемся рисовать.
  • В строке 4 мы на самом деле создаем нашу черепаху. Мы собираемся назвать его «Джо» и хранить его в переменной, чтобы мы могли дать ему команды позже.
  • Линии 6-8 – это команды «Джо». Вы видите синтаксис «точек», который должен быть довольно знакомым.
  • Линия 10 просто держит окно от закрытия, когда «Джо» сделано с его рисунком.

Если вы запустите свой код, вы должны увидеть что-то вроде следующего:

Набок Примечание. Если вы хотите реальный, старый опыт логотипа, вы можете добавить «Joe.shape (« Turtle »)» в свой код, прямо под строкой, где вы определяете «Джо». Разве он не милый?

Хорошо, теперь, когда вы видели то, о чем «черепаха», давайте вернемся к последовательности, над которой мы работали.

Кодирование последовательности

Как и все хорошо, мы определенно не собираемся получить идеальный результат на первый взгляд. Нам нужно будет сделать итерацию. Я возьму тебя через три прохода в этом художественном проекте, и каждый получит немного сложнее и немного более визуально интересным. После этого у меня есть какие-то потенциальные идеи для дальнейшей итерации, которую вы можете попробовать, если это проходит ваша творческая искра. Давайте доберемся до этого!

Первый Пытаться

Код, который мы пишем, будет очень похожим на английский, мы бы использовали для описания шагов для последовательности. Помните два правила: пройдите назад, когда это возможно, иначе выходите вперед и увеличивайте размер шага на один после каждого шага.

Создайте новый файл с именем «RECAMAN1.PY. «Мы начнем с этих основных правил, а затем выяснить, как сделать это на самом деле работать. Я называю нашу новую черепахую чудеру, после какой-то парень Отказ

import turtle

window = turtle.Screen()
euler = turtle.Turtle()  # A good mathy name for our turtle
euler.shape("turtle")

current = 0   # Here's how we know where we are
seen = set()  # Here's where we'll keep track of where we've been

# Step increases by 1 each time
for step_size in range(1, 100):

    backwards = current - step_size

    # Step backwards if its positive and we've never been there before
    if backwards > 0 and backwards not in seen:
        euler.backward(step_size)
        current = backwards
        seen.add(current)

    # Otherwise, go forwards
    else:
        euler.forward(step_size)
        current += step_size
        seen.add(current)

turtle.done()

Однако, когда мы бежим, это не выглядит очень хорошо. На самом деле, похоже, кто-то слишком дал Эйлера слишком много кофе.

Вторая попытка

Итак, это было довольно разумно. Кодекс, похоже, читает так же, как мы могли бы объяснить это кому-то, что хорошо.

Боюсь, что линейное движение – это просто немного скучно. Это когда мы хотим поставить крышки наших художников (носят ли артисты Caps?) И выясните немного более креативного способа, чтобы получить Эйлер из пункта A до пункта B.

К счастью, черепахами не нужно двигаться по прямым линиям! Они также могут двигаться в дугах и кругах. Давайте придем его отскочить из места, чтобы обнаружить на номер номер! Чтобы сделать черепаху нарисовать круг или частичную дугу, мы будем использовать команду «Circle», которая приводит к тому, что черепаха следит за кругом, в котором воображаемый центр – это подразделения «радиуса» к слевам черепахи.

Это означает, что нам придется ориентировать нашу черепаху перед рисованием, в зависимости от того, будет ли он вперед или назад, используя команду «SetHeading».

Помните, что вы можете найти все команды черепахи В официальной документации , на всякий случай, если вам интересно.

import turtle

window = turtle.Screen()
euler = turtle.Turtle()  # A good mathy name for our turtle
euler.shape("turtle")

current = 0   # Here's how we know where we are
seen = set()  # Here's where we'll keep track of where we've been

# Step increases by 1 each time
for step_size in range(1, 100):

    backwards = current - step_size

    # Step backwards if its positive and we've never been there before
    if backwards > 0 and backwards not in seen:
        euler.setheading(90) # 90 degrees is pointing straight up
        euler.circle(step_size/2, 180)  # 180 degrees means "draw a semicircle"
        current = backwards
        seen.add(current)

    # Otherwise, go forwards
    else:
        euler.setheading(270)  # 270 degrees is straight down
        euler.circle(step_size/2, 180)
        current += step_size
        seen.add(current)

turtle.done()

Это аккуратно, но в первую очередь, похоже, он просто покачивается в одном месте, и линии очень близки друг к другу. Кроме того, он не собирается использовать всю левую половину экрана!

Давайте сделаем еще одну итерацию вместе, где мы делаем это даже приятнее, чтобы посмотреть.

Третья попытка

Цели для этой итерации – сделать изображение больше, и дать ему больше места для работы.

import turtle

window = turtle.Screen()
window.setup(width=800, height=600, startx=10, starty=0.5)
euler = turtle.Turtle()  # A good mathy name for our turtle
euler.shape("turtle")
scale = 5  # This isn't a turtle module setting.  This is just for us.

# Move the little buddy over to the left side to give him more room to work
euler.penup()
euler.setpos(-390, 0)
euler.pendown()

current = 0   # Here's how we know where we are
seen = set()  # Here's where we'll keep track of where we've been

# Step increases by 1 each time
for step_size in range(1, 100):

    backwards = current - step_size

    # Step backwards if its positive and we've never been there before
    if backwards > 0 and backwards not in seen:
        euler.setheading(90)  # 90 degrees is pointing straight up
        # 180 degrees means "draw a semicircle"
        euler.circle(scale * step_size/2, 180)
        current = backwards
        seen.add(current)

    # Otherwise, go forwards
    else:
        euler.setheading(270)  # 270 degrees is straight down
        euler.circle(scale * step_size/2, 180)
        current += step_size
        seen.add(current)

turtle.done()

Как видите, мы добавили коэффициент масштабирования, который вы можете настроить на то, что вы думаете, лучше всего работает. Я прибыл на эту ценность, попробовав пару и выбираю свой любимый. Мы также перенесли его, чтобы он начинал с левой стороны экрана. Поскольку он никогда не может отрицать, мы знаем, что он пойдет прямо от того, куда он начинал.

Дальше настраивание

К настоящему времени я думаю, что вы получите суть, и вы, надеюсь, начинаете видеть магию целочисленных последовательностей: из нескольких простых правил (и с помощью неутомимого помощника рептилий) вы можете сделать некоторые по-настоящему интересными и очаровательными Результаты.

У вас есть все инструменты, которые вам нужно сделать что-то даже прохладнее. Вот несколько идей, чтобы получить ваши творческие соки, протекающие:

  • Что делать, если вы измените цвет строк? Что, если вы измените это непрерывно?
  • Что делать, если вы перекосуте на угол, чтобы занять больше экрана?
  • Что если у вас есть несколько черепах, рисующих последовательности в тандеме?
  • Что если вы изменяете предсказуемую последовательность с небольшим количеством случайности?
  • Что делать, если вы включите пользовательский ввод (щелчки мыши, ключевые нажимы и т. Д.), чтобы повлиять на то, как так ведут вести черепахи?
  • Что, если вы сделаете черепаху, которая рисует, но движется что-то действительно медленно, как цикл Луны?
  • Есть ли способ включить черепаху с помощью проекта IOT или веб-приложение?

Другие воплощения последовательности

Если вы нашли последовательность Recamán Особенно Увлекательный, ты не одинок. Существует тонна разных воплощений, которые были созданы люди, сочетая линии с цветом, звуком и многое другое. Вот несколько моих любимых.

Эта слегка пугающая версия со звуком:

Это числовое числовое видео о последовательности действительно интересно:

Кодирующий поезд также сделал пару видео на кодировке этого, если вы хотите прохладный видео прохождение с удивительным учителем и не против записи JavaScript:

На самом деле, P5.js (и его предшественник на основе Java, Обработка ) оба великие альтернативы для изготовления искусства и анимации с кодом; Они приходят с выделенными редакторами, чтобы помочь вам сделать это, и они позволяют поддержать звуки и другие надстройки!

Получить свои черепахи на передаче

Надеюсь, что этот учебник был достаточно, чтобы вызвать ваш интерес к использованию кода для создания искусства и, надеюсь (если бы вы были раньше), вы больше не слишком запуганы, чтобы посмотреть на математику как источник для ваших художественных идей.

Геометрия, нескончаемые константы, золотые коэффициенты, спирали фибоначчи, фракталы и теория чисел – все золотыемины потрясающие визуальные проекты, которые просто ждут, чтобы быть программно сгенерированным, и теперь у вас есть все инструменты, которые вам нужно, чтобы получить свой собственный набор черепах и начать Генерация!

Оригинал: “https://dev.to/rpalo/using-python-to-make-art-with-math-5add”