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