Question

Je veux faire un dessin 2D et je veux donc mettre en œuvre certaines transformations matricielles. Avec mon arrière-plan mathématique léger, j'essaie de comprendre comment le faire en C # (toute autre langue de l'OOP le ferait évidemment).

Tout ce que j'ai lu explique que nous devons travailler avec 3x3 matrices pour pouvoir faire face aux traductions. Parce que vous ne pouvez pas effectuer de traduction avec des multiplications. Mais c'est avec les multiplications des matrices que nous créons nos transformations. Nous travaillons donc avec quelque chose comme:

{ x1, x2, tx }
{ y1, y2, ty }
{ 0,  0,  1  }

Je comprends la moyenne de la troisième colonne, mais pourquoi avons-nous besoin de la troisième rangée? Dans une matrice d'identité ainsi que dans une rotation, une échelle ou une rotation, la dernière ligne est la même. Y a-t-il des opérations que je n'ai pas atteint ce qui en aura besoin? Est-ce parce que certaines langues (Java) sont mieux performantes avec des tableaux de "dimensions carrés"? Si oui, je peux utiliser 3 colonnes et 2 rangées en C # (puisque les matrices déchiquetées fonctionnent aussi bien ou mieux).

Par exemple, pour une rotation + traduction, j'ai une matrice comme celle-ci

{ cos(rot)*x1, (-sin(rot))*x2, tx }
{ sin(rot)*y1, cos(rot)*y2,    ty }
{ 0,           0,              1  }

Pas besoin de la dernière ligne.

Était-ce utile?

La solution

Ceci est avec les multiplications des matrices que nous créons nos transformations

ce est pourquoi nous voulons des matrices carrées.

Supposons que nous ayons fait ce que vous proposez et utilisé 2x3 matrices pour nos transformations.

Puis une rotation serait

( x1, x2, 0 )
( y1, y2, 0 )

et une traduction serait

( 1, 0, tx )
( 0, 1, ty )

Et nous pourrions effectuer des rotations ou des traductions en multipliant notre matrice par un vecteur de colonne représentant le point:

    ( x )
M   ( y )
    ( 0 )

Pour obtenir des réponses correctes.

Cependant, - Comment allions-nous sur composition transformations? En effet, pour votre "pour une rotation + traduction, j'ai une matrice comme cet" exemple ", comment avez-vous arriver à cette matrice? Bien sûr, dans ce cas, vous pouvez simplement l'écrire, mais en général? Eh bien, vous connaissez la réponse:

Ceci est avec les multiplications des matrices que nous créons nos transformations

Il doit donc être possible de multiplier deux matrices de transformation pour donner une autre matrice de transformation . Et les règles de la multiplication matricielle montrent que ceci:

( . . . ) ( . . . )
( . . . ) ( . . . ) = ???

n'est pas une multiplcation de matrice valide. Nous avons besoin de matrices qui peuvent être multiples pour que nos transformations soient composables. Nous avons donc cette ligne supplémentaire.


Maintenant, la façon dont je l'ai exprimée ici est en fait complètement en arrière de la présentation mathématique standard, dans laquelle les transformations familières de rotation et de traduction ne sont que des cas particuliers de la pleine puissance des transformations de coordonnées homogènes sur le plan projectif - Mais je pense que cela fera de vous montrer pourquoi nous avons besoin de cette ligne supplémentaire - pour fabriquer la carrée de matrice, et ainsi capable de se multiplier avec des matrices similaires.

Autres conseils

La réponse est des coordonnées homogènes.Pour combiner la rotation et la traduction en une seule opération, une dimension supplémentaire est nécessaire que le modèle nécessite.Pour des choses planes, il s'agit de 3 composants et de choses spatiales, il s'agit de 4 composants.Les opérateurs prennent 3 composants et renvoient 3 composants nécessitant 3x3 matrices.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top