Комбінування перетворень
Свайпніть щоб показати меню
Під час роботи з геометричними фігурами часто виникає потреба застосувати до фігури більше однієї трансформації. Цей процес називається композицією перетворень. Порядок, у якому застосовуються перетворення — такі як перенесення, обертання та масштабування — має велике значення, оскільки кожне перетворення змінює положення, розмір або орієнтацію фігури так, що це впливає на наступну операцію.
Припустимо, ви починаєте з багатокутника і хочете спочатку перенести його (перемістити), потім обернути, а потім масштабувати. Якщо змінити порядок — наприклад, спочатку масштабувати, потім обертати, а потім переносити — результат може бути зовсім іншим. Це тому, що перетворення не є комутативними: A після B не завжди дає той самий результат, що й B після A.
Щоб об'єднати перетворення, кожне з них застосовується до фігури послідовно. Кожен крок використовує результат попереднього як вхідні дані. Такий підхід дозволяє створювати складні маніпуляції з простих операцій, але завжди потрібно враховувати порядок виконання.
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647import 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()
Дякуємо за ваш відгук!
Запитати АІ
Запитати АІ
Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат