Đệ tứ và xoay quanh trục thế giới


11

Tuyên bố miễn trừ trách nhiệm: Tôi là một lập trình viên trò chơi chuyên nghiệp, và sử dụng hầu hết các ngày nhưng họ gần với ma thuật đen đối với tôi. Tôi tương đối ở nhà với môn toán nhưng những con số tưởng tượng luôn làm tôi bối rối. Tôi có xu hướng coi quats là hữu ích và cuối cùng đảo ngược nhiều lần. Tôi cố gắng lý luận về họ như tôi sẽ làm với ma trận với thành công hạn chế.

Nhưng dù sao ....

Những gì gây trở ngại cho tôi, là sau đây. Khi tôi muốn xoay một đối tượng xung quanh trục cục bộ, tôi nhân số xoay của nó với bậc bốn đại diện cho xoay mà tôi muốn áp dụng. Do đó, nó là một vòng quay trong không gian địa phương.

Bây giờ nếu tôi muốn xoay nó quanh một trục trong không gian thế giới, lý luận của tôi sẽ là: Lấy vòng quay trong không gian thế giới làm tứ phương. Nhân số nghịch đảo của xoay đối tượng của tôi với tứ phương này. Điều này sẽ mang thế giới của tôi xoay trong không gian địa phương. Nhân số vòng quay của tôi với bộ tứ mới này. tức là: newRot = oldRot * (nghịch đảo oldRot * worldRot)

Tuy nhiên, những gì tôi cần làm là newRot = oldRot * (nghịch đảo oldRot * worldRot) * oldRot.

Tại sao tôi, sau khi nhân với quat nghịch đảo vẫn cần phải nhân với quat của riêng tôi trước khi áp dụng nó? Tôi biết rằng phải có một lý do hợp lệ hoàn hảo, nhưng tôi không thể lý giải theo cách đó và điều đó làm tôi bực bội. Tôi đã thử các faqs và whatnot, nhưng hầu hết đi sâu vào toán học, làm cho nó ít rõ ràng hơn với tôi.

Bất cứ ai có thể giải thích điều này với tôi như tôi là một đứa trẻ 5 tuổi?


Nó không giống một chút với các bản dịch và chuyển vùng ma trận (nghĩa là bạn cần di chuyển đối tượng của mình vào trung tâm, xoay và sau đó di chuyển trở lại khi bạn muốn tự xoay một mục xung quanh nó: Minv_transl * Mrot * Mtransl)
Valmond

I try to reason about them like I would with matrices- sau đó bạn đang đi đúng hướng. Nếu bạn hiểu làm thế nào để xoay quanh trục của đối tượng và trục của thế giới bằng ma trận, bạn có thể làm tương tự bằng cách sử dụng tứ phương. Thứ tự nhân là giống nhau cho cả hai, ma trận và bậc bốn.
Maik

Câu trả lời:


11

Đệ tứ là liên kết:

bạn đề cập rằng giải pháp của bạn là:

newRot = oldRot * (inverse oldRot * worldRot) * oldRot

tương tự như:

newRot = oldRot * inverse oldRot * worldRot * oldRot

tương tự như:

newRot = identity * worldRot * oldRot
newRot = worldRot * oldRot

điều thực sự đưa bạn trở lại với những gì thực sự xảy ra:

localTransformed = oldRot * rot
worldTransformed = rot * oldRot

Thứ tự của ứng dụng đang thay đổi, đó là tất cả. Quay trở lại ma trận, khi bạn áp dụng ma trận đối tượng cho ma trận biến đổi và lưu trữ dưới dạng ma trận đối tượng mới, đó là phép biến đổi không gian cục bộ của bạn. Khi bạn áp dụng ma trận biến đổi cho ma trận đối tượng và lưu trữ đó, đó là biến đổi thế giới của bạn. Đó là tất cả về thứ tự của ứng dụng và không có gì hơn.


1
+1 cho phần đầu tiên, phần thứ hai hơi sai lệch. Nếu bạn chỉ sử dụng 'rot' trong mẫu mã cuối cùng, thay vì 'localRot' và 'worldRot', ví dụ sẽ trở nên rõ ràng hơn. Mặt khác, nó ngụ ý rằng bản thân các thối dù sao cũng khác nhau . Nhưng sự khác biệt chỉ nằm ở thứ tự nhân, như bạn đã chỉ ra, chứ không phải ở các nhóm khác nhau ('localRot' và 'worldRot'). 'localTransformed' và 'worldTransformed' sẽ tốt hơn như: 'rotatedAroundLocalAxis' và 'rotatedAroundWorldAxis'. Điều đó tự nó sẽ giải thích các phương trình và làm cho đoạn cuối bị lỗi thời, trong đó có một số sai sót.
Maik

Lỗ hổng trong đoạn cuối: sự phân biệt giữa ma trận và biến đổi (cả hai đều giống nhau ở đây và có thể hoán đổi cho nhau, vì vậy tốt hơn là chỉ sử dụng ma trận để tránh nhầm lẫn) và thuật ngữ "biến đổi không gian cục bộ" và "biến đổi thế giới": nó sẽ nhiều hơn chính xác để nói, phương trình đầu tiên cung cấp cho bạn 'ma trận cục bộ-thế giới' sau khi được xoay quanh trục cục bộ của đối tượng, phương trình thứ hai cung cấp cho bạn 'ma trận địa phương-thế giới' sau khi được xoay quanh trục của thế giới. Trong cả hai trường hợp, những gì bạn nhận được chỉ đơn giản là "ma trận địa phương". Tuy nhiên, phần đầu tiên có +1 của tôi để phân tích.
Maik

+1 @Maik có lẽ bạn có thể viết một câu trả lời riêng biệt để làm cho sự thờ ơ giữa các phép quay và vấn đề về thứ tự nhân thậm chí còn rõ ràng hơn? Cảm ơn cho nhận xét một trong hai cách!
Max Dohme

Ah, bây giờ nó có ý nghĩa. Tôi không biết (ouch, điều đó sẽ có trong Câu hỏi thường gặp) rằng phép nhân tứ phương có liên quan, do đó, thực sự xoay vòng và nó đảo ngược nhau, cho tôi cái nhìn sâu sắc mà tôi cần, một bên có xoay cục bộ ở bên phải và một bên còn lại về cơ bản là 'áp dụng xoay trong không gian cha mẹ' hoặc 'áp dụng xoay trong không gian cục bộ' .... không khác gì ma trận. Khá tiểu học một khi bạn nhìn thấy nó! Cảm ơn!
Kaj
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.