Kombinere Transformasjoner
Sveip for å vise menyen
Når du arbeider med geometriske former, må du ofte bruke mer enn én transformasjon på en form. Denne prosessen kalles transformasjonskomposisjon. Rekkefølgen du bruker transformasjoner i—som translasjon, rotasjon og skalering—har stor betydning, fordi hver transformasjon endrer formens posisjon, størrelse eller orientering på en måte som påvirker neste operasjon.
Anta at du starter med en polygon og ønsker å translere den (flytte den), deretter rotere den, og til slutt skalere den. Hvis du endrer rekkefølgen—f.eks. skalerer først, så roterer, deretter translerer—kan du ende opp med et helt annet resultat. Dette er fordi transformasjoner ikke er kommutative: A etterfulgt av B gir ikke nødvendigvis samme resultat som B etterfulgt av A.
For å kombinere transformasjoner, bruker du hver enkelt på formen i rekkefølge. Hvert steg bruker resultatet fra forrige steg som sitt input. Denne tilnærmingen lar deg bygge opp komplekse manipulasjoner fra enkle operasjoner, men du må alltid være oppmerksom på rekkefø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()
Takk for tilbakemeldingene dine!
Spør AI
Spør AI
Spør om hva du vil, eller prøv ett av de foreslåtte spørsmålene for å starte chatten vår