2013-08-21 6 views
5

Ich kenne die Transformationsmatrizen für Rotation, Skalierung, Translation usw. Ich kenne auch die Matrix für die Schertransformation. Nun Ich brauche die Schere haben matrix--Shear Matrix als eine Kombination von grundlegenden Transformation?

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

in Form einer Kombination von anderen vorgenannten Transformationen. Versucht zu suchen, versucht Brainstorming, aber nicht in der Lage zu schlagen! Vielen Dank!

+0

Übersetzung und Skalierung haben keinen Einfluss auf die Scherwirkung, da sie auf verschiedenen Elementen der Matrix arbeiten. Eine Drehung kann aus 3 Scheren bestehen, aber ich habe noch nie davon gehört, es andersherum zu machen. Kannst du die Frage vielleicht umformulieren? Warum brauchen Sie diese Matrix aus anderen Transformationen? Sobald Sie die endgültige Matrix erstellt haben, können Sie auch nicht mehr wissen, wie sie ursprünglich zusammengesetzt wurde, da viele verschiedene Kombinationen zu diesem Ergebnis führen können. Wofür brauchen Sie das also? – user1118321

Antwort

6

Der x-Schervorgang für einen Scherwinkel theta Drehungen und Skalierung wie reduziert folgt:

(a) durch Drehen theta/2 gegen den Uhrzeigersinn.

(b) Maßstab mit x-scaling factor = sin(theta/2) und y-scaling factor = cos(theta/2).

(c) Im Uhrzeigersinn um 45 degree drehen.

(d) Maßstab mit x-scaling factor = sqrt(2)/sin(theta) und y-scaling factor= sqrt(2).

3

Scheren sind eine elementare Matrixoperation, also können Sie sie als "eine Kombination von anderen Matrixoperationen" ausdrücken, aber das ist wirklich seltsam. Scheren nehmen die zwei Formen an:

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

Während eine Rotationsmatrix viel mehr beteiligt ist; Die Idee, eine Scherung mit Rotationen auszudrücken, legt nahe, dass Sie diese Dinge noch nicht geschrieben haben, um zu sehen, was Sie brauchen, also schauen wir uns das an. Eine Rotationsmatrix ist von der Form:

| cos -sin | 
| sin cos | 

die als eine Folge von drei bestimmten Scher Matrices zusammengesetzt sein kann, R = Sx x Sy Sx x: Now

| 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 | 

können wir einige triviale tun Matrixmanipulation, um Sy zu erhalten. Erste links multiply:

 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 

dann mit der rechten multiply:

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

Als Trivial Umschreibens eine Scherung ist jetzt zwei Scheren und eine Rotation.

Aber die viel wichtigere Frage ist: Warum müssen Sie die Schermatrix als etwas anderes ausdrücken? Es ist bereits eine elementare Matrixform, in welcher bizaren Computerumgebung sind Sie oder was für eine verrückte Sache versuchen Sie zu tun, die erfordert, dass Sie eine elementare Transformation als eine Art komplexere, viel langsamere Rechenleistung ausdrücken? =)

4

Yup es kann getan werden, eine Drehung gefolgt von ungleichmäßige Skalierung und umgekehrte Rotation. Sie finden die Details hier in der dritten Frage http://www.cs.cmu.edu/~djames/15-462/Fall03/assts/15-462-Fall03-wrAssign1-answer.pdf. Sie können den folgenden openGL Code auch versuchen. Es dreht ein Rechteck um 45 Grad und skaliert dann auf der X-Achse. und rotiert dann in -26 Grad, d.h. atan (0,5). 0,5 ergibt sich aus dem Finden des Winkels zwischen der x-Achse und einer Seite nach dem Skalieren in x-Richtung.

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);

Verwandte Themen