Combinazione di trasformazioni
Scorri per mostrare il menu
Quando si lavora con forme geometriche, spesso è necessario applicare più di una trasformazione a una forma. Questo processo è chiamato composizione delle trasformazioni. L'ordine in cui si applicano le trasformazioni—come traslazione, rotazione e scalatura—è molto importante, perché ogni trasformazione modifica la posizione, la dimensione o l'orientamento della forma in modo che influisce sull'operazione successiva.
Supponiamo di partire da un poligono e volerlo traslare (spostare), poi ruotare e infine scalare. Se si cambia l'ordine—ad esempio, prima scalare, poi ruotare e infine traslare—si può ottenere un risultato molto diverso. Questo perché le trasformazioni non sono commutative: A seguita da B non dà sempre lo stesso risultato di B seguita da A.
Per combinare le trasformazioni, si applica ciascuna di esse alla forma in sequenza. Ogni passaggio utilizza il risultato del passaggio precedente come input. Questo approccio permette di costruire manipolazioni complesse a partire da operazioni semplici, ma è sempre necessario prestare attenzione all'ordine.
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()
Grazie per i tuoi commenti!
Chieda ad AI
Chieda ad AI
Chieda pure quello che desidera o provi una delle domande suggerite per iniziare la nostra conversazione