Как сделать елочку в питоне
Перейти к содержимому

Как сделать елочку в питоне

  • автор:

Python 3, командная строка, рисуем елку

Задание

Как лучше выполнить эту задачу? вот что у меня получилось, как можно сделать по другому?

insolor's user avatar

it_lord's user avatar

Ваш код у меня вообще не отработал. Вот, Вам, мой пример генератора ёлки:

А вот с игрушками:

Если нужен такой вывод:

То: [26] ((STRAR*stars) if (i % 2) == 0 else toy(STRAR*stars)) +

Код:

Вывод:

Дизайн сайта / логотип © 2023 Stack Exchange Inc; пользовательские материалы лицензированы в соответствии с CC BY-SA . rev 2023.3.7.43281

Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.

PyOpenGL для начинающих и немного новогоднего настроения

image

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

В этой статье я постараюсь показать, насколько просто работать с OpenGL в Python. Рисовать на экране мы будем новогоднюю 3D елку. Елка будет довольно схематичная, поэтому, если вы ожидали от поста роскошную графику с шейдерами, можете дальше не читать, вам будет не интересно.

Для работы с «непитоновскими» библиотеками (например, OpenGL) необходимы модули, обеспечивающие возможность вызова функций библиотеки непосредственно из программы на языке Python. Библиотека PyOpenGL — модуль, позволяющий в программах на языке Python легко работать с функциями OpenGL, GLU и GLUT, а также с рядом расширений OpenGL.

  • Интерпретатор языка Python (ссылка).
  • Среда разработки PyCharm (ссылка) (или любая другая на ваш вкус, подойдет даже блокнот).
  • Библиотека PyOpenGL (ссылка).

Для работы с 3D графикой (в частности, OpenGL) необходимо импортировать несколько модулей:

Мы будем, насколько возможно, пользоваться функциями из модуля glut, чтобы не писать «лишний» код и не изобретать очередные велосипеды.
Инициализируем режим отображения с использованием двойной буферизации и цветов в формате RGB (двойная буферизация позволяет избежать мерцания во время перерисовки экрана):

Зададим начальный размер окна (ширина, высота):

Укажем начальное положение окна относительно левого верхнего угла экрана:

Выполним инициализацию OpenGl:

Создадим окно с заголовком «Happy New Year!»:

Запустим основной цикл программы:

Если запустить программу на выполнение, то мы увидим пустое окно с заголовком «Happy New Year!». Это замечательно, но не хватает главного — елки! Поэтому не будем останавливаться на достигнутом и пойдем дальше.

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

Переменные xrot и yrot определяют угол вращения по осям x и y (это понадобится нам в дальнейшем для того, чтобы иметь возможность осмотреть елку со всех сторон). Массив ambient определяет параметры рассеянного освещения: цвет и яркость. Далее задаются две переменные (greencolor, treecolor), определяющие зеленый цвет для иголок и коричневый цвет для ствола.

Функцией glClearColor, определяется цвет, которым будет закрашиваться экран перед каждым новым циклом перерисовки. Функцией gluOrtho2D определяем границы рисования по горизонтали и вертикали. С использованием функции glRotatef смещаемся по оси X на 90 градусов, так нам будет лучше видно елку. Функцией glLightModelfv устанавливаем рассеянную модель освещения. Включаем освещение командой glEnable(GL_LIGHTING). Просто включить освещение недостаточно, нужно добавить хотя бы один источник освещения. Делаем это функцией glEnable(GL_LIGHT0). И, напоследок, отодвинем подальше только что созданный источник света:

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

В коде specialkeys в зависимости от того, какая стрелка на клавиатуре была нажата, мы либо уменьшаем, либо увеличиваем значения переменных xrot или yrot, а затем функцией glutPostRedisplay вызываем перерисовку экрана.

Все, теперь можно приступать к главному — рисованию елки! Как и в случае с функцией specialkeys сообщим glut о том, какую процедуру использовать для перерисовки экрана: glutDisplayFunc(draw). Сама процедура draw выглядит следующим образом:

Функция glClear(GL_COLOR_BUFFER_BIT) используется для заливки экрана серым цветом. Пара функций glPushMatrix() и glPopMatrix() позволяет нам вращать только елку. Функция glLightfv(GL_LIGHT0, GL_POSITION, lightpos) «вращает» источник освещения вместе с елкой, благодаря этому, она остается «статично» освещенной. Функция glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, color) устанавливает двусторонний режим рисования, рассеянное освещение и задает цвет, которым рисуется объект. Иголки мы рисуем с использованием функции glutSolidCone(0.5, 0.5, 20, 20), а ствол елки с использованием функции glutSolidCylinder(0.1, 0.2, 20, 20). Первые два параметра этих функции определяют радиус и высоту, а последние два — количество элементов, из которых состоят фигуры (полигонов). После того, как все части елки нарисованы в памяти видеокарты, вызовом функции glutSwapBuffers() выводим их на экран.

Результат выполнения программы(елка во всей красе):

image

image

и немного видео:

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

Надеюсь, данная статья окажется для кого-то полезной и подтолкнет к дальнейшему изучению языка Python и спецификации OpenGL.
С наступающим Новым годом, товарищи.

Анимированная ёлка на Python

Анимированная ёлка на Python

Статьи

Введение

В ходе статьи напишем код на языке программирования Python, который создаст анимированную ёлку.

Написание кода анимированной ёлки на Python

Для написания кода нам понадобятся такие модули, как matplotlib, math, random,

mpl_toolkits.mplot3d. Устанавливать нам нужно только matplotlib, т.к. остальные входят в стандартную библиотеку Python. Для инсталляции модуля нужно перейти в терминал, или же командную строку, прописать pip install matplotlib, нажать Enter и ждать установки.

Теперь можем перейти к написанию кода, и для начала импортируем всё, что нам понадобится:

Создадим фигуру размерами 8 на 8 дюймов:

Создадим список, в который будем генерировать 8 рандомных цветов (в последствии эти цвета будут предназначены для украшений):

Перейдём к написанию функции animate(), в которой для начала будем удалять предыдущую фигуру для прорисовки новой:

Добавим область Axes:

Создадим переменную k, которая будет отвечать за ширину ёлки:

Зададим координаты по X, Y, Z:

Добавим листву ёлке:

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

Добавим украшения на ёлку, выбирая рандомные цвета из списка color:

Отлично, нам осталось только сохранить анимацию, и итоговый результат в виде гифки:

Анимированная ёлка на Python:

Так же можете посмотреть видео о создании анимированной Новогодней открытки на Python:

Заключение

В ходе статьи мы с Вами создали гифку анимированной ёлки на Python. Надеюсь Вам понравилась статья, желаю удачи и успехов! ��

Python Merry Christmas Code With Turtle Graphic

In this Python article iam going to show you writing Merry Christmas Code With Turtle Graphic, so for this purpose we are going to use Python Turtle Graphic.

Also you can check the complete tutorial for python GUI Frameworks

What is Python Turtle ?

Turtle graphics is a popular way for introducing programming to kids. It was part of the original Logo programming language developed by Wally Feurzig and Seymour Papert in 1966. Imagine a robotic turtle starting at (0, 0) in the x-y plane. After an import turtle , give it the command turtle .forward(15) , and it moves (on-screen!) 15 pixels in the direction it is facing, drawing a line as it moves. Give it the command turtle.right(25) , and it rotates in-place 25 degrees clockwise.By combining together these and similar commands, intricate shapes and pictures can easily be drawn.The turtle module is an extended re-implementation of the same-named module from the Python standard distribution up to version Python 2.5. It tries to keep the merits of the old turtle module and to be (nearly) 100% compatible with it. This means in the first place to enable the learning programmer to use all the commands, classes and methods interactively when using the module from within IDLE run with the -n switch.The turtle module provides turtle graphics primitives, in both object-oriented and procedure-oriented ways. Because it uses tkinter for the underlying graphics, it needs a version of Python installed with Tk support.

The object-oriented interface uses essentially two+two classes:

The Turtle Screen class defines graphics windows as a playground for the drawing turtle s. Its constructor needs a tkinter.Canvas or a ScrolledCanvas as argument. It should be used when turtle is used as part of some application.

The function Screen() returns a singleton object of a Turtle Screen subclass. This function should be used when turtle is used as a standalone tool for doing graphics. As a singleton object, inheriting from its class is not possible.

Raw Turtle (alias: RawPen ) defines Turtle objects which draw on a TurtleScreen . Its constructor needs a Canvas, ScrolledCanvas or TurtleScreen as argument, so the RawTurtle objects know where to draw.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *