2013-08-21 26 views
5

Tôi biết ma trận chuyển đổi để xoay, mở rộng, dịch vv Tôi cũng biết ma trận để biến đổi cắt. Bây giờ, tôi cần phải có sự cắt matrix--Cắt ma trận là sự kết hợp của phép biến đổi cơ bản?

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

trong hình thức của một sự kết hợp của biến đổi nêu trên khác. Cố gắng tìm kiếm, cố gắng động não, nhưng không thể tấn công! Cảm ơn!

+0

Dịch và chia tỷ lệ sẽ không ảnh hưởng đến việc cắt khi chúng hoạt động trên các phần tử khác nhau của ma trận. Một vòng quay có thể bao gồm 3 kéo, nhưng tôi đã không nghe nói về cách làm nó theo cách khác xung quanh. Bạn có thể thuật lại câu hỏi, có lẽ? Tại sao bạn cần ma trận này để bao gồm các phép biến đổi khác? Ngoài ra, khi bạn soạn ma trận cuối cùng, bạn không có cách nào biết được nó được tạo ra như thế nào, vì nhiều kết hợp khác nhau có thể dẫn đến kết quả đó, vậy trường hợp bạn cần điều này là gì? – user1118321

Trả lời

6

Các hoạt động x-cắt một góc cắt theta giảm để quay và mở rộng quy mô như sau:

(a) Xoay bởi theta/2 truy cập chiều kim đồng hồ.

(b) Quy mô với x-scaling factor = sin(theta/2)y-scaling factor = cos(theta/2).

(c) Xoay theo 45 degree theo chiều kim đồng hồ.

(d) Quy mô với x-scaling factor = sqrt(2)/sin(theta)y-scaling factor= sqrt(2).

3

Kéo cắt là thao tác ma trận cơ bản, vì vậy trong khi bạn có thể diễn đạt chúng dưới dạng "sự kết hợp của các hoạt động ma trận khác", thực hiện điều đó thật kỳ lạ. Kéo cắt có hai dạng:

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

Trong khi ma trận xoay có liên quan nhiều hơn; ý tưởng thể hiện một cắt bằng cách sử dụng phép quay cho thấy bạn đã không thực sự viết những điều này ra để xem những gì bạn cần, vì vậy chúng ta hãy nhìn vào điều này. Một ma trận xoay có dạng:

| cos -sin | 
| sin cos | 

Mà có thể được bao gồm như là một chuỗi ba ma trận cắt đặc biệt, R = Sx x Sỹ 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 | 

Bây giờ, chúng ta có thể làm một số tầm thường ma trận thao tác để có được Sy. Đầu tiên trái nhân:

 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 

Và sau đó phải nhân:

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

Là một viết lại tầm thường, một cắt tại là hai kéo và xoay.

Nhưng câu hỏi quan trọng hơn nhiều là: tại sao bạn cần biểu diễn ma trận cắt như một thứ khác? Nó đã là một dạng ma trận cơ bản, môi trường tính toán bizare là gì, hoặc bạn đang cố gắng làm gì, điều đó đòi hỏi bạn phải thể hiện một biến đổi cơ bản như một cách phức tạp hơn, chậm hơn để tính toán? =)

4

Yup nó có thể được thực hiện, một vòng quay theo sau là quy mô không đồng nhất và xoay vòng ngược. Bạn có thể tìm thấy chi tiết ở đây trong câu hỏi thứ ba http://www.cs.cmu.edu/~djames/15-462/Fall03/assts/15-462-Fall03-wrAssign1-answer.pdf. bạn cũng có thể thử mã OpenGL sau đây. Nó xoay một hình chữ nhật bằng 45 độ rồi chia tỷ lệ theo trục x. và sau đó quay ở -26 độ tức là atan (0,5). 0,5 xuất phát từ việc tìm góc giữa trục x và một bên sau khi chia tỷ lệ theo hướng 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);

Các vấn đề liên quan