Kombinering af Transformationer
Stryg for at vise menuen
Når du arbejder med geometriske figurer, skal du ofte anvende mere end én transformation på en figur. Denne proces kaldes transformationssammensætning. Rækkefølgen, hvori du anvender transformationerne—såsom translation, rotation og skalering—har stor betydning, fordi hver transformation ændrer figurens position, størrelse eller orientering på en måde, der påvirker den næste operation.
Antag, at du starter med en polygon og ønsker at translatere den (flytte den), derefter rotere den og til sidst skalere den. Hvis du ændrer rækkefølgen—f.eks. skalerer først, derefter roterer og til sidst translaterer—kan du ende med et helt andet resultat. Dette skyldes, at transformationer ikke er kommutative: A efterfulgt af B giver ikke altid det samme resultat som B efterfulgt af A.
For at kombinere transformationer anvender du hver enkelt på figuren i rækkefølge. Hvert trin bruger resultatet af det foregående trin som input. Denne tilgang gør det muligt at opbygge komplekse manipulationer ud fra simple operationer, men du skal altid være opmærksom på rækkefølgen.
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()
Tak for dine kommentarer!
Spørg AI
Spørg AI
Spørg om hvad som helst eller prøv et af de foreslåede spørgsmål for at starte vores chat