2013-08-21 9 views
5

Conosco le matrici di trasformazione per rotazione, ridimensionamento, traslazione, ecc. Conosco anche la matrice per la trasformazione di taglio. Ora, devo avere cesoia matrix--Shear Matrix come combinazione di trasformazione di base?

[1 Sx 0] 
[0 1 0] 
[0 0 1] 

sotto forma di una combinazione di altri suddette trasformazioni. Ho provato a cercare, ho provato il brainstorming, ma non sono riuscito a colpire! Grazie!

+0

La conversione e il ridimensionamento non avranno alcun effetto sulla cesoia poiché operano su diversi elementi della matrice. Una rotazione può essere composta da 3 cesoie, ma non ho sentito di farlo al contrario. Puoi riformulare la domanda, forse? Perché hai bisogno che questa matrice sia composta da altre trasformazioni? Inoltre, una volta composta la matrice finale, non hai modo di sapere come è stata originariamente composta, poiché molte combinazioni diverse possono portare a quel risultato, quindi qual è la circostanza in cui ti serve? – user1118321

risposta

6

L'operazione di x-taglio per un angolo di taglio theta riduce a rotazioni e scalatura come segue:

(a) Ruota di theta/2 senso antiorario.

(b) Scala con x-scaling factor = sin(theta/2) e y-scaling factor = cos(theta/2).

(c) Ruotare di 45 degree in senso orario.

(d) Scala con x-scaling factor = sqrt(2)/sin(theta) e y-scaling factor= sqrt(2).

3

Le cesoie sono un'operazione di matrice elementare, quindi mentre è possibile esprimerle come "una combinazione di altre operazioni di matrice", farlo è davvero strano. Le cesoie prendono le due forme:

| 1 V | | 1 0 | 
| 0 1 | , | V 1 | 

considerando che una matrice di rotazione è molto più coinvolta; l'idea di esprimere un taglio usando le rotazioni suggerisce che in realtà non hai ancora scritto queste cose per vedere di cosa hai bisogno, quindi diamo un'occhiata a questo. Una matrice di rotazione è di forma:

| cos -sin | 
| sin cos | 

Quale può essere composto da una sequenza di tre particolare matrici di taglio, R = Sx x Sy x Sx:

| cos(a) -sin(a) | |  1  0 | | 1 sin(a) | |  1  0 | 
|    | = |    | x |   | x |    | 
| sin(a) cos(a) | | -tan(a/2) 1 | | 0 1 | | -tan(a/2) 1 | 

Ora, possiamo fare un certo banale manipolazione della matrice per ottenere Sy. Prima a sinistra-moltiplicano:

 R = Sx x Sy x Sx 
Sx⁻¹ x R = Sx⁻¹ x Sy x Sx 
Sx⁻¹ x R = I x Sy x Sx 
Sx⁻¹ x R = Sy x Sx 

e quindi destri moltiplicano:

Sx⁻¹ x R x Sx⁻¹ = Sy x Sx x Sx⁻¹ 
Sx⁻¹ x R x Sx⁻¹ = Sy x I 
Sx⁻¹ x R x Sx⁻¹ = Sy 

Dato che una riscrittura banale, una cesoia è ora due cesoie e una rotazione.

Ma la domanda più importante è: perché è necessario esprimere la matrice di taglio come qualcos'altro? È già una forma di matrice elementare, in quale ambiente di elaborazione bizare sei, o quale cosa folle stai cercando di fare, che richiede di esprimere una trasformazione elementare come una via più complessa, più lenta da calcolare? =)

4

Sì, può essere eseguito, una rotazione seguita da ridimensionamento non uniforme e rotazione inversa. Puoi trovare i dettagli qui nella terza domanda http://www.cs.cmu.edu/~djames/15-462/Fall03/assts/15-462-Fall03-wrAssign1-answer.pdf. puoi provare anche il seguente codice openGL. Ruota un rettangolo di 45 gradi, quindi ridimensiona nell'asse x. e quindi ruota in -26 gradi cioè atan (0,5). 0,5 deriva dal trovare l'angolo tra l'asse xe un lato dopo il ridimensionamento in direzione x.

glRotatef (-26,0, 0,0, 0,0, 1.0);

glScalef (2,1,1);

glRotatef (45,0, 0,0, 0,0, 1,0);

glRectf (0, 0, 25,0, 25,0);

Problemi correlati