Try   HackMD

CAMA : ma01 Transformations isometriques

Cours du 30 / 03

angle = np.array([θ for θ in np.linspace(-np.pi/2,np.pi/2,7)]) shape1 = np.concatenate([np.array([np.cos(angle), np.sin(angle)]), np.array([[-0.5, -1, -1, -1], [1, 1, 0.5, 0]]), np.array([[-0.5, 0], [-0.5, -1]])], axis=1)
[[ 0.     0.5    0.866  1.     0.866  0.5    0.    -0.5   -1.    -1.    -1.    -0.5    0.   ]
 [-1.    -0.866 -0.5    0.     0.5    0.866  1.     1.     1.     0.5    0.    -0.5   -1.   ]]

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →

Matrice de rotation centrée en
(0,0)

R=[cos(θ)sin(θ)sin(θ)cos(θ)]

Propriétés

  • Effectue une rotation de centre (0,0) et d'angle θ
  • Déterminant = 1
  • Matrice orthogonale
    pas de déformation ni d'agrandissement de la forme (automorphisme orthogonal)
θ = np.pi / 4 R = np.array([[np.cos(θ), -np.sin(θ)], [np.sin(θ), np.cos(θ)]])
[[ 0.707 -0.707]
 [ 0.707  0.707]]
R @ shape1 # multiplication de matrices

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →

  • Matrice orthogonale donc (par définition)
    R.RT=Id
    .
  • La transposée est la rotation d'angle -θ puisque sinus est une fonction impaire.

Symétrie axiale

La symétrie horizontale tranformant (a,b) en (a,-b) est:

Sx=[1001]

Pour avoir un symétrie axiale par rapport à une droite passant par

(0,0) qui a un angle
α
:

  • rotation pour mettre l'axe de symétrie a l'horizontale
  • appliquer la symétrie horizontale
  • faire la rotation inverse
    S=Rα1SxRα=RαSxRα
def (α): return np.array([[np.cos(α), -np.sin(α)], [np.sin(α), np.cos(α)]]) Sx = np.array([[1, 0],[0,-1]]) θ = 70 * (2 * np.pi)/360 # 70 degrés Rα(θ) @ Sx @ Rα(-θ) @ shape1

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →

La rotation selon l'angle est :

Rα(θ) @ Sx @ Rα(-θ)
[[-0.766  0.643]
 [ 0.643  0.766]]

Translation

La translation ne peut pas etre exprimée avec un produit matriciel car ce n'est pas une application linéaire :

T(2x)2T(x)
Ce n'est pas non plus une transformation isométrique.

  • Une translation est une addition :
    T(x)=x+vt
    .
  • On change la représentation des points pour exprimer les translations sous forme de produit matriciel :
    x=(x1,x2)
    devient
    x=(x1,x2,1)

La translation par le vecteur

(v1,v2) est :
T(X)=[10v101v2001][x1x21]

v = np.array([1,2]) T = np.identity(3) # matrice de translation T[0:2,2] = v
Matrice de translation:
 [[1. 0. 1.]
 [0. 1. 2.]
 [0. 0. 1.]]
shape1_3d = np.concatenate([shape1, np.ones((1, len(shape1[0])))], axis=0) # rajoute une nouvelle dimension à la matrice pour la translation T @ shape1_3d

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →

La matrice inverse replacant la forme orange à sa position d'origine applique la transition

v=(1,2).
T1=[101012001]

Ce n'est pas la transposée de T, T n'est pas orthogonale.

Il y a 2 types d'isométries :

  • l'isométrie vectorielle ou automorphisme orthogonal :
    x,||f(x)||=x
    et conserve les angles
  • l'isométrie geométrique :
    a,b,||f(a)f(b)||=||ab||
    .

La translation est une isométrie geométrique mais pas vectorielle, c'est un automorphisme orthogonal.