Supposons une image I de dimension (2, 2). Coordonnées graphique C sont donnés comme suit:Faire pivoter une image sur son centre sur un GPU
C = [[0, 0], [1, 0],
[0, 1], [1, 1]]
Objectif: I tourner de 90 degrés autour du centre (pas l'origine).
Transformation Matrice:
TRotate (90) = [[0, 1], [-1, 0]]
(supposent que chaque paire de coordonnées peut être transformé en synchronisme (à savoir le un GPU))
Méthode:.
- Conv ert coordonnées graphiques aux coordonnées mathématiques avec l'origine comme le centre de l'image.
- Appliquez la matrice de transformation.
- Conversion en coordonnées graphiques.
Par exemple:
Convertir en coordonnées graphiques:
tx '= tx - largeur/2
ty' = ty - largeur/2
C' =[[-1, -1], [0, -1],
[-1, 0], [0, 0]]
Appliquer la matrice de transformation:
C" = [[-1, 1], [-1, -0],
[0, 1], [0, 0]]
reconvertir:
C" = [[0, 2], [0, 1],
[1, 2], [1, 1]]
la conversion est de retour hors limites ...
Je suis vraiment aux prises pour obtenir une bonne rotation d'un « centre de gravité » de travail. Je pense que ma conversion en «coordonnées mathématiques est fausse».
j'eu plus de chance par plutôt convertir les coordonnées en ce qui suit:
C' =[[-1, -1], [1, -1],
[-1, 1], [1, 1]]
I réalisé cette transformation en observant que, si l'origine existait entre les quatre pixels, avec le + ve axe y pointant vers le bas , et l'axe des x + ve vers la droite, alors le point (0,0) serait (-1, -1) et ainsi de suite pour le reste. (La rotation et la conversion résultantes donnent le résultat souhaité).
Cependant, Je ne trouve pas le bon type de transformation à appliquer aux coordonnées pour placer l'origine au centre. J'ai essayé une matrice de transformation en utilisant des coordonnées homogènes, mais cela ne fonctionne pas.
Modifier
Pour les conseils de Malcolm:
vecteur de position =
[0
0
1]
Traduire en soustrayant la largeur/2 == 1:
[-1
-1
0]
Rotation en multipliant le matrice de transformation:
|-1| | 0 1 0| |-1|
|-1| X |-1 0 0| = | 1|
|0 | | 0 0 1| | 0|
Salut Malcom. Voulez-vous dire une ligne supplémentaire dans le vecteur position donc [x, y, w], avec w = 1? Et voulez-vous dire une colonne et une ligne supplémentaires à la matrice de transformation? – user1658296
Vous pouvez penser à votre point en colonnes ou en lignes, donc si vous le dessinez comme [x y w] il a des colonnes, si vous le dessinez verticalement, il a des lignes. Cela n'a pas d'importance tant que la matrice utilise l'inverse (les lignes correspondent aux colonnes et vice versa). Il peut cependant être plus facile de comprendre si la matrice est carrée. –
Merci, Malcolm, le résultat est difficile à traduire en coordonnées graphiques, cependant. [-1, 1, 0] devrait être le point [0, 1] en coordonnées graphiques. – user1658296