Combinaison des transformations
Glissez pour afficher le menu
Lorsqu'on travaille avec des formes géométriques, il est souvent nécessaire d'appliquer plusieurs transformations à une même forme. Ce processus s'appelle la composition de transformations. L'ordre dans lequel les transformations sont appliquées—comme la translation, la rotation et la mise à l'échelle—a une grande importance, car chaque transformation modifie la position, la taille ou l'orientation de la forme d'une manière qui influence l'opération suivante.
Supposons que vous commenciez avec un polygone et que vous souhaitiez d'abord le translater (le déplacer), puis le faire pivoter, et enfin le mettre à l'échelle. Si vous changez l'ordre—par exemple, mise à l'échelle d'abord, puis rotation, puis translation—vous pouvez obtenir un résultat très différent. Cela s'explique par le fait que les transformations ne sont pas commutatives : A suivi de B ne donne pas toujours le même résultat que B suivi de A.
Pour combiner des transformations, il faut appliquer chacune d'elles à la forme, l'une après l'autre. Chaque étape utilise le résultat de l'étape précédente comme entrée. Cette méthode permet de réaliser des manipulations complexes à partir d'opérations simples, mais il faut toujours garder à l'esprit l'importance de l'ordre.
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()
Merci pour vos commentaires !
Demandez à l'IA
Demandez à l'IA
Posez n'importe quelle question ou essayez l'une des questions suggérées pour commencer notre discussion