Полігональна апроксимація кривих
Свайпніть щоб показати меню
Під час роботи з геометричним моделюванням у Python часто зустрічаються гладкі криві, такі як кола або еліпси, які неможливо безпосередньо представити лише за допомогою прямих ліній. Однак комп’ютери значно краще працюють із прямими ребрами та вершинами, ніж із справжніми математичними кривими. Саме тому криві часто апроксимують багатокутниками — фігурами, що складаються з відрізків прямих ліній.
Апроксимація кривої багатокутником означає подання кривої у вигляді послідовності з’єднаних прямих відрізків. Чим більше сторін має багатокутник, тим точніше він нагадує початкову криву. Наприклад, трикутник дуже грубо апроксимує коло, тоді як багатокутник зі 100 сторонами виглядає майже невідмінним від справжнього кола для людського ока. Цей прийом використовується в комп’ютерній графіці, цифровому моделюванні та навіть у виробничих процесах, де машини повинні слідувати траєкторіям, які можна визначити лише прямими відрізками.
Практичний приклад — малювання кола на екрані комп’ютера. Оскільки екран складається з пікселів і прямих ліній, коло насправді відображається як багатокутник з великою кількістю сторін. Такий підхід дозволяє контролювати баланс між точністю та обчислювальною складністю: більше сторін — більша точність, але й більше точок і обчислень.
Для візуалізації результату ви використаєте matplotlib, а для обчислення координат вершин багатокутника — базову тригонометрію.
123456789101112131415161718192021222324import matplotlib.pyplot as plt import numpy as np # Parameters for the circle center_x, center_y = 0, 0 radius = 1 num_sides = 12 # Try changing this value to 30 or 100 for a smoother circle # Calculate the vertices of the polygon angles = np.linspace(0, 2 * np.pi, num_sides, endpoint=False) x_points = center_x + radius * np.cos(angles) y_points = center_y + radius * np.sin(angles) # Close the polygon by repeating the first point at the end x_points = np.append(x_points, x_points[0]) y_points = np.append(y_points, y_points[0]) # Plot the polygonal approximation plt.figure(figsize=(5,5)) plt.plot(x_points, y_points, marker='o', label=f"{num_sides}-sided polygon") plt.gca().set_aspect('equal') plt.title("Polygonal Approximation of a Circle") plt.legend() plt.show()
Дякуємо за ваш відгук!
Запитати АІ
Запитати АІ
Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат