Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Вивчайте Комбінування перетворень | Геометричні перетворення
Геометричне моделювання з Python

Комбінування перетворень

Свайпніть щоб показати меню

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

Припустимо, ви починаєте з багатокутника і хочете спочатку перенести його (перемістити), потім обернути, а потім масштабувати. Якщо змінити порядок — наприклад, спочатку масштабувати, потім обертати, а потім переносити — результат може бути зовсім іншим. Це тому, що перетворення не є комутативними: A після B не завжди дає той самий результат, що й B після A.

Щоб об'єднати перетворення, кожне з них застосовується до фігури послідовно. Кожен крок використовує результат попереднього як вхідні дані. Такий підхід дозволяє створювати складні маніпуляції з простих операцій, але завжди потрібно враховувати порядок виконання.

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
import numpy as np import matplotlib.pyplot as plt # Define a simple triangle polygon polygon = np.array([ [0, 0], [1, 0], [0.5, 1], [0, 0] ]) # Translation: move by (2, 1) def translate(points, tx, ty): return points + np.array([tx, ty]) # Rotation: rotate by theta degrees around origin def rotate(points, theta_deg): theta = np.radians(theta_deg) rotation_matrix = np.array([ [np.cos(theta), -np.sin(theta)], [np.sin(theta), np.cos(theta)] ]) return points @ rotation_matrix.T # Scaling: scale by (sx, sy) def scale(points, sx, sy): scaling_matrix = np.array([ [sx, 0], [0, sy] ]) return points @ scaling_matrix.T # Apply transformations translated = translate(polygon, 2, 1) rotated = rotate(translated, 45) scaled = scale(rotated, 1.5, 0.5) # Plotting plt.figure(figsize=(6, 6)) plt.plot(polygon[:, 0], polygon[:, 1], 'bo-', label='Original') plt.plot(translated[:, 0], translated[:, 1], 'go-', label='Translated') plt.plot(rotated[:, 0], rotated[:, 1], 'ro-', label='Rotated') plt.plot(scaled[:, 0], scaled[:, 1], 'mo-', label='Scaled') plt.legend() plt.axis('equal') plt.title('Combining Translation, Rotation, and Scaling') plt.show()
question mark

Яке твердження найкраще описує, чому порядок застосування перетворень має значення при їх комбінуванні?

Виберіть правильну відповідь

Все було зрозуміло?

Як ми можемо покращити це?

Дякуємо за ваш відгук!

Секція 2. Розділ 7

Запитати АІ

expand

Запитати АІ

ChatGPT

Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат

Секція 2. Розділ 7
some-alt