Comment combiner en sténographie
?
Réponses
Trop de publicités?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
où
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)
.
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);
}