Combinando Transformaciones
Desliza para mostrar el menú
Al trabajar con figuras geométricas, a menudo es necesario aplicar más de una transformación a una figura. Este proceso se denomina composición de transformaciones. El orden en que se aplican las transformaciones—como traslación, rotación y escalado—es muy importante, ya que cada transformación modifica la posición, el tamaño o la orientación de la figura de una manera que afecta la siguiente operación.
Supón que comienzas con un polígono y deseas trasladarlo (moverlo), luego rotarlo y finalmente escalarlo. Si cambias el orden—por ejemplo, escalas primero, luego rotas y después trasladas—puedes obtener un resultado muy diferente. Esto se debe a que las transformaciones no son conmutativas: A seguida de B no siempre da el mismo resultado que B seguida de A.
Para combinar transformaciones, se aplica cada una a la figura en secuencia. Cada paso utiliza el resultado del paso anterior como entrada. Este enfoque permite construir manipulaciones complejas a partir de operaciones simples, pero siempre se debe tener en cuenta el orden.
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()
¡Gracias por tus comentarios!
Pregunte a AI
Pregunte a AI
Pregunte lo que quiera o pruebe una de las preguntas sugeridas para comenzar nuestra charla