J'ai vu dans un document de Apple que la matrice derrière la propriété de transformation de CALayer a des champs comme m14, m21, m22 et ainsi de suite. Je me souviens aussi que j'ai vu une table qui explique ces champs, il y a environ un mois ou deux. J'ai eu du mal à essayer de le trouver. Quelqu'un connaît une source?Où puis-je trouver une explication de tous les champs de la matrice de transformation?
Répondre
Ce struct ressemble à ceci:
struct CATransform3D
{
CGFloat m11, m12, m13, m14;
CGFloat m21, m22, m23, m24;
CGFloat m31, m32, m33, m34;
CGFloat m41, m42, m43, m44;
};
typedef struct CATransform3D CATransform3D;
Ceci est simplement une 4x4 matrice de transformation utilisée pour transformer 4-vecteurs. Il peut être utilisé pour représenter n'importe quel nombre de transformées linéaires. Voir article this wikipedia sur ce type de matrice. La plupart de ces éléments ne peuvent pas vraiment être interprétés de façon indépendante, mais certains le peuvent. Par exemple, m41, m42 et m43 représentent une traduction dans 3-espace. Ainsi, par exemple, si vous multipliez un point par cette matrice:
[ 1 0 0 0 ]
[ 0 1 0 0 ]
[ 0 0 1 0 ]
[ 1 2 3 1 ]
Ensuite, il se traduira par ce point par 1 vers + X, 2 unités vers + Y, et 3 vers + Z.
[ 1 0 0 0 ]
[ x y z 1 ] x [ 0 1 0 0 ] = [ x+1 y+2 z+3 1 ]
[ 0 0 1 0 ]
[ 1 2 3 1 ]
Notez que le point doit être représenté comme un vecteur 4 avec le 4ème élément étant 1. Notez également que ce vecteur est en fait une matrice elle-même et le format de cette matrice diffère de celle décrite dans l'article wikipedia sur les matrices de transformation. En effet, un point est généralement représenté par une seule colonne, une matrice à quatre lignes, mais Apple les représente sous la forme de quatre colonnes à une seule ligne. Cela signifie que toute matrice de transformation que vous voyez dans l'article wikipedia doit être transposée avant de l'utiliser sur l'iPhone pour qu'elle fonctionne correctement.
Un autre exemple est une mise à l'échelle de transformation:
[ 2 0 0 0 ]
[ 0 2 0 0 ]
[ 0 0 2 0 ]
[ 0 0 0 1 ]
Il doublera toutes les coordonnées de votre point, donc (1, 2, 3) deviendra (2, 4, 6). D'autres transformations, comme les rotations et les projections en perspective, sont plus difficiles à reconnaître à vue.
Voici plus d'informations sur transforms de Apple. Un tas de transformations utilitaires est fourni par Apple pour générer ces matrices, voir this link. Ils ne discutent pas réellement les maths derrière CATransform3DMakeRotation, mais this link fait.
- 1. Déterminer la matrice de transformation
- 2. Problème de filtre de transformation de matrice Internet Explorer
- 3. Réinitialiser l'échelle dans une matrice de transformation GDI +
- 4. sérialisation tous les champs
- 5. Rails: Comment trouver() tous les enregistrements uniques dans certains champs?
- 6. matrice trouver grâce à l'optimisation
- 7. Comment puis-je appliquer une matrice de transformation de couleur à une texture dans OpenGL
- 8. Comment trouver tous les champs publics d'un objet en C#?
- 9. Blackberry - obtenir tous les champs de contrôle de l'enfant
- 10. Formule pour une matrice de projection orthogonale?
- 11. Où puis-je trouver une liste de tous les mots-clés HQL?
- 12. Obtenir l'ID de de tous les champs sélectionnés en php
- 13. Trouver le nombre et la résolution de tous les moniteurs
- 14. Où trouver la définition de CeCreateDatabaseWithProps
- 15. Où trouver les statistiques d'utilisation de la version .NET?
- 16. Comment lire les champs de texte dans MATLAB et créer une seule matrice
- 17. CGAL: Matrice de transformation pour la rotation à deux lignes/vecteurs/directions
- 18. Identity Insert manquant dans tous les objets de transformation de flux de données SSIS pertinents?
- 19. Trouver tous les appels de procédure stockée MySQL?
- 20. Trouver tous les objets de base de données par nom?
- 21. convertir une matrice de listes à une matrice
- 22. Géodonnées du nom complet de la région, où trouver?
- 23. SQL: Trouver les lignes où la valeur du champ diffère
- 24. Réduire tous les champs de classe à l'exception des commentaires
- 25. comment rechercher de tous les champs dans sql
- 26. Comment trouver une liste de champs en double
- 27. OpenGL: Aide à la transformation de caméra
- 28. Trouver la plus grande surface de nombres adjacents dans une matrice
- 29. Déclaration SQL Ajouter à tous les champs
- 30. Comment faire défiler les blocs de matrice?
C'est une excellente explication, mais je pense que vous avez transposé vos axes. Les valeurs de translation X, Y et Z sont représentées par m41, m42 et m43, et non m14, m24 et m34. –
@NickLockwood bonne prise, j'ai mis à jour l'explication en conséquence. – Gabe