Оголошення

Проєкт на Python "Цей дивно симетричний світ"

| sveta
Симетричні фігури на мові програмування Python
Автор роботи:
Каданцев Микита
Керівник:
Сич Людмила Петрiвна
Навчальний заклад:
ОЗЗСО "Академiчний"
Клас:
8

Учень 8 класу, виконуючи науково-дослідницький проєкт з математики на тему "Цей дивно симетричний світ", використовує мову Python для програмування симетричних фігур, досліджує симетрію, вчиться застосовувати теоретичні знання і програмування у розв'язанні задач, записує власне відео, розкриваючи роботу над проєктом.

Докладніше про роботу:

У процесі науково-дослідницької роботи з математики про дивно симетричний світ учень 8 класу з використанням мови Python програмує візуалізацію симетрії, розглядає різні види симетрії в геометрії, їх застосування в мистецтві та архітектурі. Робота спрямована на розвиток аналітичного мислення, творчих навичок учня та поглиблення його освіти в галузі математики та програмування.

Виконуючи дослідницьку роботу в рамках навчального проєкту "Цей дивно симетричний світ" автор намагається надихнути школярів написанням програм на мові Python, використанням програмування в математиці. Учень заохочує дітей на вивчення складних математичних концепцій через цікаві та креативні завдання з симетрії, а також до подальшого самостійного дослідження у цій галузі.

Учень 8 класу, Каданцев Микита, під керівництвом Людмили Петрівни, презентує навчальний науково-дослідницький проєкт з математики "Цей дивний симетричний світ". Робота включає у себе розділи про різновиди симетрії в геометрії (осева, центральна, обертальна), застосування симетрії в мистецтві та архітектурі, програмування симетричних фігур на мові програмування Python (включаючи візуалізацію герба України та геометричні візерунки за допомогою бібліотек Turtle та Matplotlib). Учень досліджує симетрію як важливий аспект математики, вчиться застосовувати ці знання у практичних завданнях та розширює свої математичні навички і знання.

Зміст

Вступ
1. Види симетрії в геометрії
1.1 Осева симетрія
1.2 Центральна симетрія
1.3 Обертальна симетрія
2. Застосування симетрії в мистецтві та архітектурі
3. Програмування симетричних фігур на Python
3.1 Візуалізація герба України
3.2 Задача з колами та рівностороннім трикутником
3.3 Геометричні візерунки за допомогою бібліотек Turtle та Matplotlib
Висновок
Використані джерела

Вступ

Симетрія відіграє важливу роль в природі, мистецтві, архітектурі та математиці. Вона не лише красива, але й корисна для розуміння структур та їх властивостей. У цьому проєкті ми досліджуємо різні види симетрії та покажемо, як можна візуалізувати симетричні фігури за допомогою програм на мові Python.

Мета проєкту полягає у вивченні та розумінні різних видів симетрії в геометрії, їх застосуванні в мистецтві та архітектурі, а також в програмуванні симетричних фігур на мові Python.
Проєкт спрямований на розвиток аналітичного мислення, творчих навичок учня та поглиблення його освіти в галузі математики та програмування.
Мета проєкту - надихнути учня на вивчення складних математичних концепцій через цікаві та креативні завдання з симетрії і заохочити його до подальшого самостійного дослідження у цій галузі.

1. Види симетрії в геометрії

1.1 Осева симетрія

Осева симетрія — це симетрія відносно осі. Об’єкт має осеву симетрію, якщо його дві половини є дзеркальним відображенням одна одної відносно цієї осі. Приклади включають відображення у воді або симетрію листка дерева.

осева симетрія в геометрії

1.2 Центральна симетрія

Центральна симетрія — це симетрія відносно точки, що називається центром симетрії. Кожен елемент фігури має відповідний елемент, який знаходиться на однаковій відстані від центру, але в протилежному напрямку. Прикладом є симетрія сніжинки.

центральна симетрія в геометрії

1.3 Обертальна симетрія

Обертальна симетрія існує, якщо об’єкт виглядає однаково після повороту на певний кут. Обертальні симетрії часто зустрічаються у квітках, зірках та інших природних об’єктах.

обертальна симетрія в геометріїТріскеліон, що відображається на прапорі острова Мен, має симетрію обертання, оскільки він виглядає однаковим, якщо повернути його на третину повного обороту навколо свого центру. Через те, що його зовнішній вигляд ідентичний у трьох різних орієнтаціях, його обертальна симетрія є трикратною.

2. Застосування симетрії в мистецтві та архітектурі

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

симетрія в архітектурі

3. Програмування симетричних фігур на Python

У даному розділі дослідницької роботи з математики на тему "Цей дивно симетричний світ" ми покажемо, як за допомогою Python можна візуалізувати різні симетричні фігури та візерунки.

3.1 Візуалізація герба України

Використовуючи Python, ми можемо створити візуалізацію герба України, демонструючи його симетричні властивості. Також ви можете переглянути GIF-файл з візуалізацією герба України на мові Python:

Візуалізація герба України на мові Python

Представляю вам код програми. Детальний приклад коду для створення такого зображення можна знайти в моєму GitHub-репозиторії.

Код програми на мові програмування Python
"Візуалізація герба України"

import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation

# Координати частин
points_parts = [
     [(0, 9), (1, 8), (0.5, 2), (2, -1), (3, 0), (2, 1), (2.5, 5.5), (5, 8), (5, -4),
     (2, -4), (1, -6), (0, -7)],
     [(0, 9), (-1, 8), (-0.5, 2), (-2, -1), (-3, 0), (-2, 1), (-2.5, 5.5), (-5, 8),
     (-5, -4), (-2, -4), (-1, -6), (0, -7)],
     [(4, -0.5), (4, -3), (2.5, -3), (2, -2), (4, -0.5)],
     [(-4, -0.5), (-4, -3), (-2.5, -3), (-2, -2), (-4, -0.5)],
     [(4, 0), (4, 5.5), (3.5, 5), (3, 1), (4, 0)],
     [(-4, 0), (-4, 5.5), (-3.5, 5), (-3, 1), (-4, 0)],
     [(1, -2), (1.5, -3), (0.5, -3), (1, -2)],
     [(-1, -2), (-1.5, -3), (-0.5, -3), (-1, -2)],
     [(-0.5, -4), (-1, -4), (-0.5, -5.5), (-0.5, -4)],
     [(0.5, -4), (1, -4), (0.5, -5.5), (0.5, -4)],
     [(0, 1), (-1, -1), (0, -2)],
     [(0, 1), (1, -1), (0, -2)]
]

# Налаштування анімації
total_duration = 10000 # Загальна тривалість анімації в мілісекундах (10 секунд)
total_points = 0
for i in range(0, len(points_parts), 2):
     total_points += max(len(points_parts[i]), len(points_parts[i + 1]))
interval = total_duration
// total_points # Інтервал анімації
pause_duration = 500 # Продовження паузи перед повтором у мілісекундах

# Створення графіка
fig, ax = plt.subplots(figsize=(10, 10)) # Збільшення розміру вікна

# Встановлення кольору фону
ax.set_facecolor('#2255aa') # Темно-синій колір

# Налаштування осей
ax.set_xlim(-10, 10)
ax.set_ylim(-10, 10)
ax.set_aspect('equal', adjustable='box')

# Додавання підпису під графіком
fig.text(0.5, 0.05, 'Анімація створена за допомогою бібліотеки Matplotlib та FFmpeg '
     '(Микита Каданцев, Python 3.12)',
     ha='center', fontsize=12, color='blue')

# Жовті лінії для кожної частини
lines = [ax.plot([], [], color='#FFD700', lw=4)[0] for _ in points_parts]

# Рамка
for spine in ax.spines.values():
     spine.set_edgecolor('yellow')
     spine.set_linewidth(2)
def init():
     for line in lines:
          line.set_data([], [])
     return lines
def update(frame):

# Оновлення індексу для повторення анімації після паузи
     actual_frame = frame % (total_points + (pause_duration // interval))

# Якщо це кадр під час паузи, не оновлюємо
     if actual_frame >= total_points:
          return lines

# Прорисовка
accumulated_frames = 0
for i in range(0, len(points_parts), 2):
     part_len = max(len(points_parts[i]), len(points_parts[i + 1]))
     if accumulated_frames + part_len > actual_frame:
          part_frame = actual_frame - accumulated_frames
          x_data_1 = [p[0] for p in points_parts[i][:min(part_frame + 1, len(points_parts[i]))]]
          y_data_1 = [p[1] for p in points_parts[i][:min(part_frame + 1, len(points_parts[i]))]]
          x_data_2 = [p[0] for p in points_parts[i + 1][:min(part_frame + 1, len(points_parts[i + 1]))]]
          y_data_2 = [p[1] for p in points_parts[i + 1][:min(part_frame + 1, len(points_parts[i + 1]))]]
          if part_frame >= len(points_parts[i]):
          x_data_1 += [points_parts[i][-1][0]] * (part_frame + 1 - len(points_parts[i]))
          y_data_1 += [points_parts[i][-1][1]] * (part_frame + 1 - len(points_parts[i]))
     if part_frame >= len(points_parts[i + 1]):
          x_data_2 += [points_parts[i + 1][-1][0]] * (part_frame + 1 - len(points_parts[i + 1]))
          y_data_2 += [points_parts[i + 1][-1][1]] * (part_frame + 1 - len(points_parts[i + 1]))
          lines[i].set_data(x_data_1, y_data_1)
          lines[i + 1].set_data(x_data_2, y_data_2)
          break
     accumulated_frames += part_len
     return lines

# Створення анімації
ani = FuncAnimation(fig, update, frames=total_points + (pause_duration // interval),
          init_func=init, blit=True, interval=interval, repeat=True)

# Збереження анімації у файл
ani.save('Ukrainian_trident_b.gif', writer='pillow', fps=1000 // interval)
ani.save('Ukrainian_trident_b.mp4', writer='ffmpeg', fps=1000 // interval)

# Відображення графіка
plt.show()

3.2 Задача з колами та рівностороннім трикутником

У цій задачі потрібно визначити кількість кіл, які мають зовнішній або внутрішній дотик з трьома даними колами, вершини яких утворюють рівносторонній трикутник, при умові, що ці кола не мають спільних точок. Відеопрезентація цієї задачі доступна на YouTube. - 912 задача з геометрії за 8-й клас.

"Жива математика" Микита Каданцев

Для докладного вивчення методу розв'язання та практичного застосування можна переглянути код, реалізований мною на Python, у відповідному репозиторії на GitHub.

Центри трьох рівних між собою кіл є вершинами рівностороннього трикутника

Представляю вам коду програми. Детальний приклад коду для створення такого зображення можна знайти в моєму GitHub-репозиторії.

Код програми на мові Python
"Задача з колами та рівностороннім трикутником"

import matplotlib.pyplot as plt
import numpy as np

# Створюємо площину (сітку) розміром 20x20
plt.figure(figsize=(8, 8))
plt.grid(False)
plt.xticks(np.arange(0, 21, 1))
plt.yticks(np.arange(0, 21, 1))
comment1 = plt.text(5, 10, """
Каданцев Mикита
Геометрія № 912
""", fontsize=15, color='red', fontdict={'family': 'serif', 'style': 'italic'})
plt.pause(5)
comment1.remove()
comment2 = plt.text(2, 11, """
№ 912.
Центри трьох рівних між собою кіл є вершинами
рівностороннього трикутника. Ці кола не мають спільних точок.
Скільки існує кіл, які мають зовнішній або внутрішній
дотик із трьома даними колами?
""", fontsize=11, color='red', fontdict={'family': 'serif', 'style': 'italic'})
plt.pause(15)
comment2.remove()

# Написати коментарі
plt.text(1, 17.5, """
Центри трьох рівних між собою кіл є вершинами
рівностороннього трикутника. Ці кола не мають спільних точок
""", fontsize=12, color='blue')
plt.pause(1)

# plt.text(5, 14, "(комментарий 1)", fontsize=10, color='gray')

# Начальні три круги з вказаними координатами та радіусом 1
circle_centers = [(10.5, 7.6), (8, 12), (13, 12)]
radius = 1
for x, y in circle_centers:
     circle = plt.Circle((x, y), radius, color='blue', fill=True)
     plt.gca().add_patch(circle)
     plt.pause(1)
center_x = sum([center[0] for center in circle_centers]) / len(circle_centers)
center_y = sum([center[1] for center in circle_centers]) / len(circle_centers)
plt.pause(4)

# +1 Внутрішнє касаюче коло
plt.text(1, 4, "+1 - Внутрішнє дотичне коло", fontsize=10, color='red')
plt.pause(1)
circle_inner = plt.Circle((10.5, 10.5), 1.9, color='red', fill=False)
plt.gca().add_patch(circle_inner)
plt.pause(4)

# +1 Зовнішнє дотичне коло с диаметром 4
plt.text(1, 3, "+1 - Зовнішнє дотичне коло", fontsize=10, color='red')
plt.pause(1)
circle_inner = plt.Circle((10.5, 10.5), 3.95, color='red', fill=False)
plt.gca().add_patch(circle_inner)
plt.pause(4)

# Коло навколо одного кола та дотикається двох інших з внутрішньої сторони:
# 3 таких кола, по одному для кожного з трьох початкових кіл

plt.text(1, 1, """
+3 - Коло навколо одного кола та дотикається двох інших кіл з внутрішньої
сторони: 3 таких кола, по одному для кожного з трьох початкових кіл
""", fontsize=10, color='black')
plt.pause(1)
circle_inner = plt.Circle((9.36, 11.12), 2.7, color='black', fill=False)
plt.gca().add_patch(circle_inner)
plt.pause(1)
circle_inner = plt.Circle((11.64, 11.12), 2.7, color='black', fill=False)
plt.gca().add_patch(circle_inner)
plt.pause(1)
circle_inner = plt.Circle((10.5, 9.3), 2.7, color='black', fill=False)
plt.gca().add_patch(circle_inner)
plt.pause(8)

# Коло всередині якого два початкових кола і що дотикається третього:
# 3 таких кола, по одному для кожної пари початкових кіл.
plt.text(1, 0, """
+3 - Коло, всередині якого два початкових кола, і що дотикається третього:
3 таких кола, по одному для кожної пари початкових кіл
""", fontsize=10, color='green')
plt.pause(1)
circle_inner = plt.Circle((10.5, 12.1), 3.5, color='green', fill=False)
plt.gca().add_patch(circle_inner)
plt.pause(1)
circle_inner = plt.Circle((11.9, 9.7), 3.5, color='green', fill=False)
plt.gca().add_patch(circle_inner)
plt.pause(1)
circle_inner = plt.Circle((9.1, 9.7), 3.5, color='green', fill=False)
plt.gca().add_patch(circle_inner)
plt.pause(8)
comment3 = plt.text(9, 2, """
Отже, разом у нас є
1 + 1 + 3 + 3 = 8 кіл,
які задовольняють умовам завдання.
""", fontsize=12, color='red', fontdict={'family': 'serif', 'style': 'italic'})
plt.pause(5)
plt.gca().set_aspect('equal', adjustable='box')
# Встановимо співвідношення сторін для коректного відображення
plt.show()

3.3 Геометричні візерунки за допомогою бібліотек Turtle та Matplotlib

Використовуючи бібліотеки Turtle та Matplotlib, можна створювати красиві геометричні візерунки. Приклади коду для створення симетричних візерунків доступні на нашому GitHub-репозиторії.
Наша програма демонструє, як за допомогою програмування можна створювати геометричні візерунки та художні твори. Для цього використовується мова програмування Python та бібліотека Turtle, яка дозволяє малювати графічні зображення.

У програмі налаштовується екран з роздільною здатністю 1280x720 пікселів, що відповідає співвідношенню сторін 16:9. Це забезпечує зручний формат для відображення візерунка. Колір фону екрану змінюється на світло-сірий, щоб візерунок був більш контрастним і чітко виділявся на ньому. Також встановлюється заголовок вікна на "Моя черпехова графіка", надаючи йому індивідуальності.

Для малювання створюється об'єкт черепахи, який виконує роль "пензля". Ця черепаха може рухатися по екрану, залишаючи слід, як справжній пензель на полотні. Максимальна швидкість руху черепахи встановлюється так, щоб процес малювання був швидким і плавним. Крім того, задається червоний колір для ліній, які малює черепаха, що додає нашому візерунку яскравості.

Перед початком малювання черепаха переміщується в центр екрану. Це дозволяє почати малювання з середини екрану і рівномірно заповнити весь простір. Потім за допомогою циклу малюється складний візерунок. Черепаха рухається вперед, створюючи лінії, і робить повороти, створюючи геометричні форми. Масштабування використовується для того, щоб малюнок повністю помістився в межах екрану.
Кожен крок черепахи включає рух вперед на певну відстань, поворот на 200 градусів і малювання кола. Завдяки цій комбінації простих рухів створюється складний і гарний візерунок, який поступово заповнює екран.

Після завершення малювання використовується команда turtle.done(), щоб залишити вікно з графікою відкритим. Це дозволяє насолоджуватися створеним візерунком і розглядати його деталі.
Ця програма ілюструє, як можна використовувати прості команди програмування для створення складних та красивих геометричних візерунків. Такі візерунки можуть знаходити застосування у мистецтві, дизайні та навіть у навчанні, показуючи, як математика та програмування можуть створювати естетично привабливі роботи.

Геометричні візерунки за допомогою бібліотек Turtle та Matplotlib

Представляю вам код програми. Детальний приклад коду для створення такого зображення можна знайти в моєму GitHub-репозиторії.

Код програми на мові Python з використанням бібліотеки Turtle
"Геометричні симетричні візерунки"

import turtle

# Створення екрану
canvas = turtle.Screen()
canvas.setup(width=1280, height=720)
# Встановлення роздільної здатності екрану 16:9
canvas.bgcolor("lightgray")
canvas.title ("Микита Каданцев")

# Створення черепахи
yungMula = turtle.Turtle()
yungMula.speed(0)
yungMula.pencolor("red")

# Переміщення черепахи в центр
yungMula.penup()
yungMula.goto(0, 0)
yungMula.pendown()

# Малювання
scale = 0.4 # Масштабування, щоб рисунок помістився в межах екрану
for x in range(1000):
yungMula.forward(x * scale)
yungMula.left(200)
yungMula.circle(x * scale)

# Залишення вікна з графікою відкритим
turtle.done()

скріншоти коду програми симетрії на Python

Висновок

Симетрія — це фундаментальний принцип, який зустрічається у багатьох аспектах нашого життя.

Використовуючи мову програмування Python та його бібліотеки на прикладі проєкту з математики "Цей дивно симетричний світ", ми можемо створювати та візуалізувати симетричні фігури, що допомагає краще зрозуміти їх властивості та застосування. Робота в рамках нашого науково-дослідницького проєкту демонструє, як програмування може бути використане для створення красивих та функціональних геометричних візерунків.

Використані джерела

  • Інтернет-ресурси для дослідження та збирання зображень симетрії.
  • GitHub як інструмент для зберігання та поширення вихідних кодів.
  • JetBrains PyCharm як середовище розробки програм.
  • Мова програмування Python 3.12 для створення програм та візуалізацій.
  • Створення геометричних візерунків: Використання бібліотек Matplotlib та Turtle для візуалізації симетричних фігур.
  • YouTube для розміщення відеороликів з презентаціями рішень задач та візуалізацій.

Якщо сторінка Вам сподобалась, поділіться у соціальних меражах:

Нові проєкти і роботи

Навчальні програми

Банер сайту

Сайт Обучонок містить дослідницькі роботи і творчі проєкти учнів шкіл України, теми дослідницьких робіт, проєктів і міні-проєктів з різних предметів, правила і вимоги оформлення.
Будемо вдячні, якщо встановите на своєму сайті наш банер!

Банер сайту Обучонок в Україні
Код банера:

<a href="https://obuchonok.com.ua" target="_blank"> <img src="https://obuchonok.com.ua/obuchua.gif" width="88" height="31" alt="Обучонок - дослідницькі роботи і проєкти учнів України"></a>

Інші банери...

Статистика

Карта сайту Обучонок Україна