Đệ tứ là gì?


50

Đệ tứ là gì, và làm thế nào họ làm việc? Ngoài ra, những lợi thế nào bạn có được khi sử dụng ba điểm trên mặt phẳng 2D? Cuối cùng, khi nào nó được coi là thực hành tốt để sử dụng tứ phương?



Trong lịch sử, tôi nghĩ rằng các bậc bốn xuất hiện đầu tiên, và sau đó các sản phẩm chấm và chéo được lấy từ các bậc bốn.

2
Tôi thấy bài viết hoạt hình này rất nhiều thông tin: acko.net/blog/animate-your-way-to-glory-pt2/#quothersions
AShelly

Trong toán học thuần túy, tôi tin rằng các bậc bốn là 3 số phức như i² = j² = k² = ijk
Vinz243

Đệ tứ là cách tốt nhất để nội suy xoay trơn tru. Chỉ nội suy ma trận xoay không hoạt động, vì kết quả là bạn sẽ không nhận được ma trận xoay. Nội suy các góc Euler không dẫn đến một vòng quay trơn tru. Vì vậy, để hoạt hình xoay, giống như nó là cần thiết trong đồ họa máy tính hoặc robot, tứ phương là con đường để đi. Và có một tiện ích mở rộng hữu ích, nhưng bằng cách nào đó không thường được sử dụng, được gọi là tứ phân vị kép cho phép bạn biểu diễn phép biến đổi và xoay
Tobias B

Câu trả lời:


43

Về mặt toán học, một bộ tứ là một số phức với 4 chiều. Nhưng trong phát triển trò chơi, Quancyions thường được sử dụng để mô tả một vòng quay trong không gian 3d bằng cách mã hóa:

  1. một trục quay (dưới dạng vector 3 chiều)
  2. bao xa để quay quanh trục đó

Lưu ý rằng thông tin này được mã hóa với các sin và cosin bên trong bậc bốn, vì vậy, nói chung, bạn không nên cố gắng đặt hoặc đọc rõ ràng các thành phần bên trong của bộ tứ (xyzw). Thật dễ dàng để phạm sai lầm theo cách đó và nhận được một kết quả không có ý nghĩa. Một thư viện toán học bậc bốn thường sẽ cung cấp các hàm để hoạt động trên các bậc bốn (ví dụ: chuyển đổi chúng thành & từ các góc Euler hoặc góc trục), đảm bảo toán học chính xác và có lợi ích phụ là làm cho mã của bạn dễ đọc và dễ hiểu hơn.

Một cách khác để mô tả các phép quay là bằng cách mô tả khoảng cách xoay quanh 3 trục cố định 'x, y và z (còn gọi là góc Euler) chỉ cần 3 số thay vì 4 và thường trực quan hơn để sử dụng. Tuy nhiên, góc euler phải chịu một vấn đề gọi là khóa gimbal : Khi bạn xoay 90 ° quanh một trục, hai trục còn lại trở nên tương đương. Với tứ phương, vấn đề này không xảy ra.

Một cách khác để thể hiện các phép quay trong không gian 3d là với ma trận biến đổi 4 x 4 . Nhưng với ma trận biến đổi, bạn không chỉ xoay, mà còn chia tỷ lệ, dịch và nghiêng. Khi bạn chỉ muốn xoay vòng, một ma trận sẽ là quá mức cần thiết và một giải pháp nhanh hơn và đơn giản hơn nhiều.

Vấn đề này chỉ có liên quan trong không gian 3d. Trong không gian 2d, bạn chỉ có một trục xoay. Bất kỳ phép quay nào cũng có thể được biểu thị bằng một số dấu phẩy động đơn hoặc một số phức đơn, vì vậy bạn không gặp phải vấn đề này. Về mặt lý thuyết, bạn có thể biểu thị một phép quay trên mặt phẳng 2d với một bậc bốn trong đó trục chỉ vào (hoặc ra) mặt phẳng, nó thường là quá mức cần thiết.


6
Khóa gimbal không phải là vấn đề trong tứ phương nếu bạn bắt đầu từ bậc bốn và kết thúc bằng bậc bốn, khóa gimbal sẽ đặt khi bạn có một bước chuyển đổi sang góc euler hoặc quay lại.
ratchet freak

2
Đệ tứ không phải là trục + góc, chúng là 3 số phức và một tỷ lệ.
bóng bán

11
@ transitor09 bạn có tin rằng bạn đều đúng không? Phần ảo 3 thành phần của một đơn vị bậc bốn có thể được hiểu là một vectơ đơn vị dọc theo trục quay, được chia tỷ lệ bởi sin của một nửa góc quay. Phần thực của tứ phương đơn vị là cosin của một nửa góc quay. Vì vậy, bạn đúng rằng nó không chính xác là định dạng trục góc, nhưng sự thật là các thành phần của một bậc bốn có thể được hiểu là một trục và một phép đo (phi tuyến tính) về khoảng cách xoay quanh trục đó.
DMGregory

2
Bạn cũng có thể đề cập đến những ưu điểm nào có trong các ma trận xoay vòng: chúng nhanh hơn để kết hợp. Khi kết hợp các phép quay, nhân hai bậc bốn đòi hỏi ít thao tác hơn so với nhân ma trận.
Tái lập lại

3
Trên thực tế, trong không gian 2D, số phức là tương tự chính xác. Nhân một điểm 2D với một số phức và bạn đã xoay nó - trên thực tế, nó hoàn toàn giống với xoay sin / cos thông thường (điều này là hiển nhiên nếu bạn hiểu đủ các số phức). Điều này có thể được khai thác một chút, nhưng cuối cùng, đồ họa 2D không phải là hiệu năng chuyên sâu ngày nay, vì vậy nó không mang lại cho bạn nhiều cải tiến trừ khi bạn thực sự thoải mái khi sử dụng các số phức (mà hầu hết mọi người quyết định không - bằng chứng là mã dựa trên bậc bốn cực kỳ nghèo nàn ngoài kia: D).
Luaan

13

Điều này là để thêm vào câu trả lời của @ Philipp.

Ngoài ra, những lợi thế nào bạn có được khi sử dụng ba điểm trên mặt phẳng 2D?

Bạn không thực sự cần tứ phân nếu tất cả những gì bạn quan tâm là xoay trên mặt phẳng, tức là về trục z. Trong trường hợp này, tất cả những gì bạn cần là góc ngáp và bạn có thể khai thác thực tế là các phép quay liên tiếp về trục z đi lại. Vì vậy, bạn có thể áp dụng luân chuyển của bạn theo bất kỳ thứ tự nào bạn muốn.

Tình huống sẽ khác nếu bạn quay trên mặt phẳng không phải là mặt phẳng XY. Xoay này tương đương với xoay quanh một trục 3D tùy ý. Bây giờ, bạn có hai lựa chọn:

  • xoay mặt phẳng của bạn trong 3D để nó trùng với mặt phẳng XY rồi ngáp, và biến đổi trở lại, hoặc

  • nghĩ về sự xoay vòng của bạn như đang ở trong 3D để bắt đầu.

Sự lựa chọn thứ hai là mã dễ dàng hơn. Như @Philipp đã nói, bộ tứ tránh khóa gimbal (nếu bạn tránh chuyển đổi RPY trung gian hoặc chuyển đổi trục / góc).

Cuối cùng, khi nào nó được coi là thực hành tốt để sử dụng tứ phương?

Bất cứ khi nào có xoay 3D, đó là cách tốt để sử dụng tứ phương.

Ví dụ:

  • Trong Qt . Quats giúp dễ dàng nội suy giữa các phép quay, như trong hàm slerp .

  • ROS sử dụng chúng để biến đổi tư thế robot.

  • Trong động cơ Bullet

  • Đối với một ứng dụng rất tinh vi, xem ở đây để sử dụng chúng trong cơ học 3D cổ điển.


" Bất cứ khi nào có xoay 3D, đó là cách tốt để sử dụng tứ phương." chỉ là hơi quá mạnh. Hầu như luôn luôn là tốt hơn; có những tình huống mà sự thay thế là phù hợp. (Như một ví dụ về sự không hoàn hảo, gốc thứ n của Quancyion là đa giá trị)
Yakk

1
Đệ tứ là một hàng hóa để sử dụng và một nỗi đau để thực hiện. Bạn có thể hòa đồng mà không có họ nếu bạn biết về khóa gimbal.
Hatoru Hansou
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.