Tại sao nghịch đảo chuyển vị của ma trận khung nhìn mô hình được sử dụng để biến đổi các vectơ bình thường?


22

Khi kết xuất các cảnh 3D với các phép biến đổi được áp dụng cho các đối tượng, các quy tắc phải được biến đổi với nghịch đảo chuyển vị của ma trận khung nhìn mô hình. Vì vậy, với n , modelViewMatrix bình thường, biến đổi bình thường làn 'Mn'

n'= =(M-1)Tn

Khi chuyển đổi các đối tượng, rõ ràng là các quy tắc cần phải được chuyển đổi cho phù hợp. Nhưng tại sao, về mặt toán học, đây có phải là ma trận biến đổi tương ứng?


Nếu ma trận mô hình được tạo từ dịch, xoay và tỷ lệ, bạn không cần thực hiện chuyển đổi nghịch đảo để tính ma trận bình thường. Đơn giản chỉ cần chia bình thường theo tỷ lệ bình phương và nhân với ma trận mô hình và chúng ta đã hoàn thành. Bạn có thể mở rộng nó đến bất kỳ ma trận nào với các trục vuông góc, chỉ cần tính tỷ lệ bình phương cho mỗi trục của ma trận bạn đang sử dụng thay thế. Tôi đã viết các chi tiết trong blog của mình: lxjk.github.io/2017/10/01/Stop-Using-N normal
Eric

Câu trả lời:


22

Đây là một bằng chứng đơn giản rằng chuyển đổi nghịch đảo là bắt buộc. Giả sử ta có một mặt phẳng, được xác định bởi phương trình mặt phẳng , trong đó n là bình thường. Bây giờ tôi muốn chuyển đổi máy bay này bằng một số ma trận M . Nói cách khác, tôi muốn tìm một phương trình mới máy bay n 'M x + d ' = 0 được hài lòng cho giống hệt nhau x giá trị thỏa mãn phương trình mặt phẳng trước.nx+d=0nMnMx+d=0x

Để làm điều này, nó đủ để đặt hai phương trình mặt phẳng bằng nhau. (Điều này từ bỏ khả năng hủy bỏ các phương trình mặt phẳng tùy ý, nhưng điều đó không quan trọng đối với đối số.) Sau đó, chúng ta có thể đặt và trừ nó ra. Những gì chúng tôi còn lại là:d=d

nMx=nx

Tôi sẽ viết lại điều này với các sản phẩm dấu chấm được biểu thị bằng ký hiệu ma trận (nghĩ về các vectơ dưới dạng ma trận 1 cột):

nTMx=nTx

Bây giờ để đáp ứng điều này cho tất cả , chúng ta phải có:x

nTM=nT

Bây giờ giải cho theo n ,nn

nT=nTM1n=(nTM1)Tn=(M1)Tn

Mau! Nếu các điểm được biến đổi bởi ma trận M , thì các mặt phẳng chuẩn phải biến đổi theo chuyển vị nghịch đảo của M để bảo toàn phương trình mặt phẳng.xMM

Đây về cơ bản là một tài sản của sản phẩm chấm. Để sản phẩm chấm vẫn bất biến khi áp dụng phép biến đổi, hai vectơ được chấm phải biến đổi theo những cách tương ứng nhưng khác nhau.

Về mặt toán học, điều này có thể được mô tả bằng cách nói rằng vectơ bình thường không phải là một vectơ bình thường, mà là một thứ gọi là covector (còn gọi là vectơ covariant, vectơ kép hoặc dạng tuyến tính). Một covector về cơ bản được định nghĩa là "một thứ có thể được chấm với một vectơ để tạo ra một vô hướng bất biến". Để đạt được điều đó, nó phải biến đổi bằng cách sử dụng chuyển vị nghịch đảo của bất kỳ ma trận nào đang hoạt động trên các vectơ thông thường. Điều này giữ trong bất kỳ số lượng kích thước.

Lưu ý rằng trong 3D cụ thể, một bivector tương tự như một covector. Chúng không hoàn toàn giống nhau vì chúng có các đơn vị khác nhau: một covector có các đơn vị độ dài nghịch đảo trong khi một bivector có đơn vị độ dài bình phương (diện tích), vì vậy chúng hoạt động khác nhau theo tỷ lệ. Tuy nhiên, họ thực hiện chuyển đổi theo cùng một cách liên quan đến định hướng của họ, đó là điều quan trọng đối với thông thường. Chúng ta thường không quan tâm đến độ lớn của bình thường (dù sao chúng ta luôn bình thường hóa chúng theo đơn vị chiều dài), vì vậy chúng ta thường không cần phải lo lắng về sự khác biệt giữa bivector và covector.


2
giải thích tuyệt vời. tuy nhiên một chút nhanh chóng trên 2 điểm, một chút chi tiết sẽ được yêu thích: 1. làm thế nào để bạn chuyển từ sản phẩm chấm sang sản phẩm ma trận? 2. giữa dòng 2 và 3 của phần trích dẫn cuối cùng, điều gì xảy ra (n được chuyển từ trái sang phải một chút kỳ diệu với tôi)
v.oddou

4
1. (a ^ T) b giống như dấu chấm (a, b) nếu a và b là ma trận cột có cùng chiều. Hãy thử toán cho chính mình! 2. (AB) ^ T = (B ^ T) (A ^ T) và (A ^ T) ^ T = A Để biết thêm danh tính ma trận, hãy xem The Matrix Cookbook
Mokosha

3
@ v.oddou Yep, Mokosha nói đúng. Sản phẩm chấm có thể được biểu thị bằng cách nhân ma trận 1 × n (vectơ hàng) với ma trận × 1 (vectơ cột); kết quả là ma trận 1 × 1 có thành phần duy nhất là sản phẩm chấm. Chuyển vị của một vectơ cột là một vectơ hàng, vì vậy chúng ta có thể viết a · b là a ^ T b. Đối với câu hỏi thứ hai, hoán vị một sản phẩm của ma trận tương đương với hoán vị các yếu tố riêng lẻ và đảo ngược thứ tự của chúng.
Nathan Reed

hoàn hảo, tất cả rõ ràng mà không có vấn đề bây giờ. Cảm ơn cả hai.
v.oddou

@NathanReed (Trời ạ, điều này đưa tôi trở lại những ngày đầu PowerVR nơi chúng tôi mô hình hóa hầu hết mọi thứ với các mặt phẳng). Cũng có thể đáng nói rằng, với mục đích tối ưu hóa, nếu bạn có ma trận Mr chỉ chứa các phép quay, (tức là trực giao) thì Inverse ( Mr ) = Transpose ( Mr ), và do đó Trans (Inverse ( Mr ) = _ Mr_. Bạn cũng có thể sử dụng các phím tắt với phần dịch và nếu bạn biết tỷ lệ là đồng nhất. FWIW trong thư viện đồ họa SGL PowerVR, chúng tôi thường giữ booleans để theo dõi liệu ma trận biến đổi có các thuộc tính này để tiết kiệm chi phí với các phép biến đổi thông thường hay không.
Simon F

6

Điều này chỉ đơn giản là vì quy tắc không thực sự là vectơ! Chúng được tạo ra bởi các sản phẩm chéo, kết quả là bivector , không phải vectơ. Đại số hoạt động khác nhau nhiều cho các tọa độ này, và biến đổi hình học chỉ là một hoạt động hành xử khác nhau.

Một nguồn tuyệt vời để tìm hiểu thêm về điều này là bài thuyết trình của Eric Lengyel về Đại số Grassman .


Người bình thường cũng được gọi là giả. Là một khái quát và quy tắc của ngón tay cái, mọi thứ kết quả từ một sản phẩm chéo (ví dụ: máy bay) sẽ được chuyển đổi theo cách tương tự.
Matthias
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.