79 votes

abréviation de rotate3d

Comment combiner en sténographie ?

314voto

Ana Points 19473

rotateX(50deg) est équivalent à rotate3d(1, 0, 0, 50deg)

rotateY(20deg) est équivalent à rotate3d(0, 1, 0, 20deg)

rotateZ(15deg) est équivalent à rotate3d(0, 0, 1, 15deg)

Alors...

rotateX(50deg) rotateY(20deg) rotateZ(15deg)

est équivalent à

rotate3d(1, 0, 0, 50deg) rotate3d(0, 1, 0, 20deg) rotate3d(0, 0, 1, 15deg)


Pour un générique rotate3d(x, y, z, α), vous avez la matrice

generic rotate matrix

explanation


Vous pouvez maintenant obtenir les matrices pour chacune des 3 rotate3d transforme et vous les multiplier. Et la matrice est la matrice correspondant à l'unique qui en résulte rotate3d. Pas sûr de savoir comment il est facile d'extraire les valeurs de rotate3d hors de lui, mais il est sûr facile à extraire pour un seul matrix3d.


Dans le premier cas (rotateX(50deg) ou rotate3d(1, 0, 0, 50deg)), vous avez:

x = 1, y = 0, z = 0, α = 50deg

Donc, la première ligne de la matrice dans ce cas, est - 1 0 0 0.

Le second est 0 cos(50deg) -sin(50deg) 0.

Le troisième, 0 sin(50deg) cos(50deg) 0.

Et la quatrième est évidemment 0 0 0 1.


Dans le second cas, vous avez x = 0, y = 1, z = 0, α = 20deg.

Première rangée: cos(20deg) 0 sin(20deg) 0.

Deuxième rangée: 0 1 0 0.

Troisième rangée: -sin(20) 0 cos(20deg) 0.

Quatrième: 0 0 0 1


Dans le troisième cas, vous avez x = 0, y = 0, z = 1, α = 15deg.

Première rangée: cos(15deg) -sin(15deg) 0 0.

Deuxième rangée sin(15deg) cos(15deg) 0 0.

Et la troisième et la quatrième rangée, sont 0 0 1 0 et 0 0 0 1 respectivement.


Remarque: vous avez peut-être remarqué que les signes du péché valeurs pour les rotateY transformer sont les mêmes que pour les deux autres transformations. Ce n'est pas une erreur de calcul. La raison pour cela est que, pour l'écran, vous avez l'axe des y vers le bas, pas vers le haut.


Ce sont donc ces trois 4x4 matrices que vous avez besoin de multiplier afin d'obtenir l' 4x4 de la matrice pour l'unique qui en résulte rotate3d transformer. Comme je l'ai dit, je ne suis pas sûr de savoir comment il peut être facile d'obtenir les 4 valeurs, mais les 16 éléments dans la matrice 4x4 sont exactement les 16 paramètres de l' matrix3d équivalent de la chaîne de transformation.


EDIT:

En fait, il s'avère que c'est assez facile... permet de calculer la trace (la somme des éléments de la diagonale) de la matrice pour l' rotate3d de la matrice.

4 - 2*2*(1 - cos(α))/2 = 4 - 2*(1 - cos(α)) = 2 + 2*cos(α)

Vous de calculer la trace pour le produit des trois 4x4 matrices, vous correspondent le résultat avec 2 + 2*cos(α) vous extraire α. Ensuite, vous calculez x, y, z.

Dans ce cas particulier, si j'ai calculé correctement, la trace de la matrice résultant du produit des trois 4x4 matrices va être:

T = 
cos(20deg)*cos(15deg) + 
cos(50deg)*cos(15deg) - sin(50deg)*sin(20deg)*cos(15deg) + 
cos(50deg)*cos(20deg) + 
1

Donc, cos(α) = (T - 2)/2 = T/2 - 1, ce qui signifie qu' α = acos(T/2 - 1).

15voto

La syntaxe

rotate3d(x, y, z, a)

Les valeurs

x Est un décrivant la coordonnée x du vecteur indiquant l'axe de rotation. y Est un décrivant la coordonnée du vecteur indiquant l'axe de rotation. z Est un décrivant la coordonnée z du vecteur indiquant l'axe de rotation. un Est un représentant de l'angle de la rotation. Un angle positif indique une rotation dans le sens horaire, un angle négatif d'une des aiguilles d'une montre.

Comme dans :

.will-distort{
    transform:rotate3d(10, 10, 10, 45deg);
}

Jouait ici

Caniuse ici

Plus de docs à ce sujet

3voto

Bigood Points 3940

La valeur exacte est ``

Voir le fiddle (pour chrome et Safari, à l’aide de - webkit-transform)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X