Kombinera transformationer
Svep för att visa menyn
När du arbetar med geometriska former behöver du ofta tillämpa mer än en transformation på en form. Denna process kallas transformationskomposition. Ordningen i vilken du tillämpar transformationer—såsom translation, rotation och skalning—är mycket viktig, eftersom varje transformation ändrar formens position, storlek eller orientering på ett sätt som påverkar nästa operation.
Anta att du börjar med en polygon och vill translatera (flytta) den, sedan rotera den och slutligen skala den. Om du ändrar ordningen—till exempel skalar först, sedan roterar och därefter translaterar—kan du få ett helt annat resultat. Detta beror på att transformationer inte är kommutativa: A följt av B ger inte alltid samma resultat som B följt av A.
För att kombinera transformationer tillämpar du varje transformation på formen i tur och ordning. Varje steg använder resultatet från föregående steg som sin indata. Detta tillvägagångssätt gör det möjligt att bygga upp komplexa manipulationer från enkla operationer, men du måste alltid vara medveten om ordningen.
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()
Tack för dina kommentarer!
Fråga AI
Fråga AI
Fråga vad du vill eller prova någon av de föreslagna frågorna för att starta vårt samtal