Mã C minh họa thực hiện thuật toán sau đây được đưa ra tại đây. Một giải pháp khép kín được cho là của Ronald Goldman được trình bày dưới dạng hàm C này. Đóng góp của Bruce Vaughan dưới dạng tập lệnh Python cho phần mềm thiết kế SDS/2. ĐiểmXoay. py
Phép quay một điểm trong không gian 3 chiều theo theta quanh một trục tùy ý được xác định bởi một đường thẳng giữa hai điểm P1 = [x1,y1,z1] và P2 = [x2,y2,z2] có thể đạt được bằng các bước sau
- [1] tịnh tiến không gian sao cho trục quay đi qua gốc tọa độ
[2] quay không gian quanh trục x sao cho trục quay nằm trong mặt phẳng xz
[3] xoay không gian quanh trục y sao cho trục quay nằm dọc theo trục z
[4] thực hiện phép quay theta mong muốn về trục z
[5] áp dụng nghịch đảo của bước [3]
[6] áp dụng nghịch đảo của bước [2]
[7] áp dụng nghịch đảo của bước [1]
Ghi chú
Nếu trục quay đã thẳng hàng với trục z thì không cần thực hiện các bước 2, 3, 5 và 6
Trong tất cả những gì theo sau, một hệ tọa độ tay phải được giả định và các phép quay là dương khi nhìn xuống trục quay về phía gốc tọa độ
Các ký hiệu đại diện cho ma trận sẽ được in đậm
Nghịch đảo của ma trận xoay dưới đây đặc biệt đơn giản vì định thức là đơn vị trong mỗi trường hợp
Tất cả các góc quay được coi là dương nếu nhìn ngược chiều kim đồng hồ xuống trục quay về phía gốc tọa độ
Bước 1
Dịch không gian để trục quay đi qua gốc tọa độ. Điều này được thực hiện bằng cách dịch không gian theo -P1 [-x1,-y1,-z1]. Ma trận dịch T và nghịch đảo T-1 [bắt buộc cho bước 7] được đưa ra bên dưới
Bước 2
Quay không gian quanh trục x sao cho trục quay nằm trong mặt phẳng xz. Gọi U = [a,b,c] là vectơ đơn vị dọc theo trục quay. và xác định d = sqrt[b2 + c2] là độ dài của hình chiếu lên mặt phẳng yz. Nếu d = 0 thì trục quay dọc theo trục x và không cần quay thêm. Mặt khác, xoay trục quay sao cho nằm trong mặt phẳng xz. Góc quay để đạt được điều này là góc giữa hình chiếu của trục quay trong mặt phẳng yz và trục z. Điều này có thể được tính từ tích vô hướng của thành phần z của vectơ đơn vị U và phép chiếu yz của nó. Sin của góc được xác định bằng cách xét tích chéo
[0,0,c] chấm [0,b,c]cos[t] == c/dc d. [0,0,c] chéo [0,b,c]. sin[t] == b/dc dMa trận xoay Rx và nghịch đảo Rx-1 [bắt buộc cho bước 6] được đưa ra bên dưới
Rx =10000c/d-b/d00b/dc/d00001Rx-1 =10000c/db/d00-b/dc/d00001Bước 3
Xoay không gian quanh trục y sao cho trục quay nằm dọc theo trục z dương. Sử dụng các mối quan hệ dấu chấm và tích chéo thích hợp như trước cosin của góc là d, sin của góc là a. Ma trận xoay quanh trục y Ry và nghịch đảo Ry-1 [bắt buộc cho bước 5] được đưa ra bên dưới
Bước 4
Xoay quanh trục z theo t [theta] là Rz và đơn giản là
Rz =cos[t]sin[t]00-sin[t]cos[t]0000100001Phép biến hình hoàn chỉnh để quay một điểm [x,y,z] quanh trục quay đến một điểm mới [x`,y`,z`] như sau, phép biến hình thuận theo sau là phép biến hình nghịch
Sử dụng bậc bốn
Để xoay một vectơ 3D "p" theo góc theta quanh một trục [đơn vị] "r", người ta tạo thành quaternion
Q1 = [0,px,py,pz]và tứ phương quay
Q2 = [cos[theta/2], rx sin[theta/2], ry sin[theta/2], rz sin[theta/2]]Vectơ quay là ba thành phần cuối cùng của quaternion
Dễ dàng thấy rằng phép quay theo hướng ngược lại [-theta] có thể đạt được bằng cách đảo ngược thứ tự của phép nhân
Kho lưu trữ này là một gói Python để giúp dạy và học toán xoay 3D. Nó có hai mô-đun
- pyrotation_demo. py - chứa bản demo tương tác dựa trên GUI của xoay 3D của khung tham chiếu
- sự đốt cháy. py - chứa lớp lõi và các quy trình để biểu diễn và vận hành xoay vòng 3D
Cả hai mô-đun đều được thử nghiệm trên Python 3. 6, NumPy 1. 19, Matplotlib 3. 1. 2
Xem các trang trình bày để tìm hiểu các biểu diễn xoay vòng 3D
pyrotation_demo. py
Mô-đun pyrotation_demo cung cấp bốn trình hiển thị GUI tương tác dựa trên matplotlib, tương ứng với bốn biểu diễn xoay vòng 3D được triển khai trong mô-đun pyrotation. Người dùng có thể kéo các thanh trượt để thay đổi trực tiếp các thông số của hình biểu diễn và góc quay tương ứng của hệ quy chiếu được thể hiện theo thời gian thực. Bản trình diễn này chủ yếu được thực hiện để tìm hiểu cách hoạt động của xoay 3D
Mô-đun này yêu cầu mô-đun numpy, matplotlib và pyrotation
sự đốt cháy. py
Mô-đun pyrotation cung cấp bốn cách biểu diễn khác nhau của phép quay 3D cũng như các thao tác tương ứng trên các cách biểu diễn này
- Trục góc - được biểu diễn dưới dạng vectơ 3 chiều u, trong đó hướng của nó là trục và chiều dài của nó là góc [góc có thể âm, có nghĩa là phép quay sử dụng hướng ngược lại của vectơ]. Phép quay tuân theo quy tắc bàn tay phải
- Các góc Euler [theo quy ước nội tại z-y'-x"] - được biểu diễn dưới dạng một bộ gồm ba góc [z, y, x]. Những góc này còn được gọi là góc Tait-Bryan, hoặc góc [yaw, pitch, roll]. Có các quy ước khác về góc Euler và chỉ ký hiệu cụ thể này được triển khai và sử dụng trong bản demo
- Ma trận xoay - được biểu diễn dưới dạng ma trận 3 nhân 3 R
- Unit quaternion - được biểu diễn dưới dạng đối tượng q của lớp quaternion tùy chỉnh được xác định trong mô-đun pyrotation. Quaternion là theo quy ước Hamilton, i. e. , [qw, qx, qy, qz]
Mô-đun này yêu cầu numpy. Trong mọi trường hợp, tọa độ của một điểm 3D được biểu diễn dưới dạng một vectơ 3 chiều gọn gàng. Mảng điểm 3D được biểu diễn dưới dạng ma trận 3 nhân numpy, trong đó n là số điểm. Hệ quy chiếu tọa độ thuận tay phải
Bắt đầuCài đặt
Chỉ cần tải xuống pyrotation. py và pyrotation_demo. py và chạy
Cách sử dụng mô-đun pyrotation_demo
Đặt cả hai quá trình pyrotation. py và pyrotation_demo. py vào cùng một thư mục và khởi chạy bản demo bằng lệnh sau
$ python3 ./pyrotation_demo.py [mode]
"Chế độ" có thể là một trong những điều sau đây
- "u" hoặc "angle_axis" - trục góc [mặc định nếu chế độ không được cung cấp]
- "e" hoặc "euler" - Góc Euler [theo quy ước nội tại z-y'-x"]
- "r" hoặc "R" hoặc "rotation_matrix" - ma trận xoay
- "q" hoặc "quaternion" - đơn vị quaternion
Ví dụ: nếu lệnh sau được sử dụng,
$ python3 ./pyrotation_demo.py q
Sau đó, bản demo với quaternion được hiển thị
giải thích phổ biến
Trong tất cả các bản demo, các trục sử dụng cài đặt màu này
- trục x có màu đỏ
- trục y có màu xanh lục
- trục z có màu xanh lam
Ba trục của hệ quy chiếu ban đầu được biểu thị bằng các đường đứt nét với màu đen và màu xen kẽ, và hệ quy chiếu quay được biểu thị bằng các đường liền có màu
Một đĩa rắn trên mặt phẳng XOY trong hệ quy chiếu ban đầu được hiển thị để đại diện cho "mặt đất"
Bản trình diễn Biểu diễn Góc-Trục của Xoay 3D
giải thích
Trong GUI demo, trục xoay được biểu thị bằng đường chấm và nét đứt qua gốc tọa độ. Vectơ xoay, i. e. , vectơ u, được hiển thị dưới dạng mũi tên liền màu đen trên trục. Hình chiếu của trục trên mặt đất được thể hiện dưới dạng đường chấm chấm
Bên cạnh đó, một vòng tròn nét đứt được hiển thị, trong đó trục quay đi qua tâm của vòng tròn và vuông góc với mặt phẳng của vòng tròn. Hai mũi tên nét đứt nằm trên mặt phẳng này hướng từ tâm của vòng tròn đến trục x ban đầu và đã quay. Trên vòng tròn, một vòng cung màu đỏ có mũi tên hiển thị góc xoay, chỉ từ trục x ban đầu sang trục x đã xoay. Chúng cùng nhau thể hiện hình dạng hình nón quay một vectơ hoặc điểm dọc theo một trục
Lưu ý rằng trục này luôn qua gốc tọa độ. Một phép quay tùy ý với một trục không đi qua gốc tọa độ có thể được phân tách thành một phép tịnh tiến từ một điểm trên trục tới gốc tọa độ, một phép quay với một trục qua gốc tọa độ và một phép tịnh tiến khác trở lại điểm
Góc quay và trục quay có thể được điều khiển trực tiếp bằng ba thanh trượt. Lưu ý rằng để điều khiển trục, các góc phương vị thay thế của trục được sử dụng. Do đó, ngay cả trong trường hợp suy biến, khi góc quay bằng 0, trục vẫn có thể được xác định bằng cách sử dụng các góc phương vị thay thế [đường chấm chấm biểu thị hình chiếu của trục trên mặt đất được tính theo góc phương vị, do đó, ngay cả . Góc xoay ở
[-180, +180]
độ, góc alt ở[-90, +90]
độ và góc phương vị ở[-180, +180]
độ
Demo Biểu diễn Góc Euler của Phép quay 3D
giải thích
Góc nghiêng được hiển thị dưới dạng một vòng cung màu xanh lam trên mặt đất, hướng từ trục x của khung ban đầu đến hình chiếu của trục x đã xoay trên mặt đất
Góc nghiêng được hiển thị dưới dạng một cung màu lục, chỉ từ điểm kết thúc của cung góc nghiêng đến trục x được xoay, i. e. , từ đỉnh của hình chiếu trục x đã xoay trên mặt đất, được hiển thị dưới dạng đường chấm màu đỏ, đến đỉnh của trục x đã xoay
Góc cuộn được hiển thị dưới dạng một vòng cung màu đỏ trong mặt phẳng YOZ đã quay trên một đường tròn nét đứt, hướng từ đỉnh của hình chiếu của trục y đã quay trên mặt đất, được hiển thị dưới dạng một đường chấm màu xanh lá cây, đến đỉnh của hình chiếu đã xoay
Hình chiếu của trục z của hệ quy chiếu ban đầu trên mặt phẳng YOZ của hệ quy chiếu đã quay được hiển thị dưới dạng một đường chấm màu xanh lam
Ba góc Euler có thể được điều khiển trực tiếp bằng ba thanh trượt. Cả ba góc đều ở
[-180, +180]
độ. Ngay cả trong trường hợp khóa gimbal, trong đó góc nghiêng là -90 độ hoặc +90 độ, góc nghiêng và góc cuộn có thể được điều khiển độc lập, mặc dù hiệu ứng của chúng sẽ không thể phân biệt được trong trường hợp này
Bản trình diễn Ma trận Xoay Biểu diễn Xoay 3D
giải thích
To construct a rotation matrix, three orthonormal basis vectors of the rotated reference frame are needed. However, since these three basis vectors are orthonormal, once two vectors are given [or one plane and a vector on the plane are given], the three basis vectors and the rotation matrix can be uniquely determined. This demo provides three modes as follows, and the current mode can be changed using the two buttons with "" arrows.
"ux-uy", trong đó vectơ "ux" là trục x của hệ quy chiếu được xoay và các vectơ "ux" và "uy" cùng nhau xác định mặt phẳng XOY của hệ quy chiếu được quay. Mặt phẳng này được hiển thị dưới dạng một vòng tròn nét đứt. Trong chế độ này, "ux" được hiển thị dưới dạng một đường liền màu đỏ [i. e. , trục x sau khi xoay] và "uy" được hiển thị dưới dạng đường đứt nét màu lục
"uy-uz", trong đó vectơ "uy" là trục y của hệ quy chiếu xoay và vectơ "uy" và "uz" cùng nhau xác định mặt phẳng YOZ của hệ quy chiếu xoay. Mặt phẳng này được hiển thị dưới dạng một vòng tròn nét đứt. Ở chế độ này, "uy" được hiển thị dưới dạng một đường liền màu xanh lục [i. e. , trục y sau khi xoay] và "uz" được hiển thị dưới dạng đường đứt nét màu lam
"uz-ux", trong đó vectơ "uz" là trục z của hệ quy chiếu được xoay và các vectơ "uz" và "ux" cùng nhau xác định mặt phẳng ZOX của hệ quy chiếu được quay. Mặt phẳng này được hiển thị dưới dạng một vòng tròn nét đứt. Trong chế độ này, "uz" được hiển thị dưới dạng một đường liền màu xanh lam [i. e. , trục z sau khi xoay] và "ux" được hiển thị dưới dạng đường đứt nét màu đỏ
Ba vectơ cơ sở của khung tham chiếu xoay có thể được điều khiển trực tiếp bằng thanh trượt. Vì chúng đều là vectơ đơn vị [i. e. , chỉ các hướng là quan trọng và độ dài của chúng không quan trọng], chương trình demo này sử dụng các góc phương vị thay thế để điều khiển chúng. Trong mỗi chế độ, có thể điều khiển hai vectơ và việc thay đổi vectơ thứ ba không ảnh hưởng
Hình chiếu của hai vectơ điều khiển trên mặt đất được hiển thị dưới dạng các đường chấm chấm với các màu tương ứng. Chúng có nguồn gốc từ các góc phương vị. Các góc alt ở
[-90, +90]
độ và các góc phương vị ở[-180, +180]
độ
Bản demo của Biểu diễn Quaternion Đơn vị của Xoay 3D
giải thích
Trục góc quay, i. e. , vectơ u, tương ứng với quaternion đơn vị được hiển thị dưới dạng một mũi tên đen đặc. Mặt phẳng YOZ của hệ quy chiếu quay được hiển thị dưới dạng một đường tròn nét đứt
Bốn thành phần của quaternion đơn vị có thể được điều khiển trực tiếp bởi bốn thanh trượt. Tuy nhiên, không đơn giản để điều khiển một bậc bốn thành một phép quay mà người dùng mong muốn. Vì nó là một quaternion đơn vị, bốn thành phần được ghép nối và người dùng không thể thay đổi một thành phần mà không ảnh hưởng đến các thành phần khác. Chương trình demo này cung cấp ba cách như sau
Thay đổi góc quay khi giữ nguyên trục, sử dụng thanh trượt của qw. Trong trường hợp này, ba thành phần khác của quaternion sẽ được cập nhật theo tỷ lệ để giữ hướng của trục quay
Thay đổi hướng trục trong khi vẫn duy trì góc [luôn thành pi], bằng cách thay đổi một trong qx, qy và qz. Trong trường hợp này, qw luôn được đặt thành 0, trong khi hai thành phần khác không được thay đổi trực tiếp bằng thanh trượt là khác không và được cập nhật theo chủ đề. Điều này cho phép trục quay, trục bị thay đổi bởi các thanh trượt, cũng như trục tương ứng của hệ quy chiếu ban đầu luôn nằm trong cùng một mặt phẳng. Ví dụ: nếu thanh trượt của qx bị thay đổi trong khi qy và qz khác không, thì trục quay, trục x ban đầu và trục x sau khi quay nằm trong cùng một mặt phẳng. Hai trục còn lại cũng giữ nguyên thuộc tính máy đồng này khi thay đổi trục quay
Xoay dọc theo một trong các trục của hệ quy chiếu ban đầu, bằng cách thay đổi một trong các qx, qy và qz. Trong trường hợp này, qw luôn được đặt thành 0, trong khi hai thành phần khác cũng bằng không
Sử dụng mô-đun pyrotation
Cách sử dụng chung
Đầu tiên, nhập mô-đun pyrotation
>>> import pyrotation
Đối với trục góc, góc Euler và ma trận xoay, chúng chỉ sử dụng các kiểu Python và kiểu Numpy tích hợp sẵn, tôi. e. , không có lớp tùy chỉnh nào được xác định. Do đó, một tập hợp các chức năng hoạt động trên các loại tích hợp và gọn gàng được cung cấp. Đối với quaternion, một lớp Quaternion
tùy chỉnh được định nghĩa và tất cả các thao tác trên một quaternion là các phương thức của lớp hoặc đối tượng
Xử lý điểm kỳ dị
Mô-đun này xác định giá trị
$ python3 ./pyrotation_demo.py q
0, được coi là độ chính xác cần thiết để so sánh dấu phẩy động [thường là 1e-6]. Ví dụ: nếu giá trị tuyệt đối của số dấu phẩy động $ python3 ./pyrotation_demo.py q
1 nhỏ hơn $ python3 ./pyrotation_demo.py q
0, thì $ python3 ./pyrotation_demo.py q
1 được coi là 0 khi xử lý điểm kỳ dị. Trong tài liệu sau đây, "nếu $ python3 ./pyrotation_demo.py q
1 bằng 0" thường có nghĩa là "nếu giá trị tuyệt đối của $ python3 ./pyrotation_demo.py q
1 nhỏ hơn $ python3 ./pyrotation_demo.py q
0" trong mãGóc-Trục
Sử dụng hàm
7 để tạo một vectơ đơn vị$ python3 ./pyrotation_demo.py q
8 biểu thị một trục từ các góc phương vị thay thế theo độ. Lưu ý rằng các góc phương vị thay thế không bị giới hạn trong một phạm vi. Tuy nhiên, thông thường,$ python3 ./pyrotation_demo.py q
9 phải ở$ python3 ./pyrotation_demo.py q
[-90, +90]
độ và
1 phải ở>>> import pyrotation
[-180, +180]
độSử dụng hàm
3 để chuyển đổi vectơ trục>>> import pyrotation
8 thành góc phương vị thay thế theo độ. Nếu độ dài của$ python3 ./pyrotation_demo.py q
8 bằng 0, cờ$ python3 ./pyrotation_demo.py q
6 được đặt thành>>> import pyrotation
7,>>> import pyrotation
9 được đặt thành +90 độ và$ python3 ./pyrotation_demo.py q
1 được đặt thành 0 độ. Nếu>>> import pyrotation
8 khác không nhưng chỉ vào trục z hoặc đối diện với trục z, cờ$ python3 ./pyrotation_demo.py q
[-180, +180]
1 được đặt thành
7,>>> import pyrotation
9 được đặt thành +90 độ và$ python3 ./pyrotation_demo.py q
1 được đặt thành 0 độ>>> import pyrotation
Sử dụng hàm
[-180, +180]
5 để xoay một điểm[-180, +180]
6 bằng phép quay trục góc
8 và thu được điểm đã xoay$ python3 ./pyrotation_demo.py q
[-180, +180]
8. Cả[-180, +180]
6 và[-180, +180]
8 đều là mảng 3 chiều gọn gàngSử dụng hàm
[-90, +90]
1 để xoay một mảng các điểm[-90, +90]
2 bằng phép quay góc-trục
8 và thu được mảng điểm đã xoay$ python3 ./pyrotation_demo.py q
[-90, +90]
4. Cả[-90, +90]
2 và[-90, +90]
4 đều là ma trận 3 nhân numpy trong đó n là số điểmSử dụng hàm
[-90, +90]
7 để chuyển đổi trục góc
8 thành ma trận xoay$ python3 ./pyrotation_demo.py q
[-90, +90]
9. Nếu độ dài của
8 bằng 0, ma trận đơn vị được trả về$ python3 ./pyrotation_demo.py q
Sử dụng hàm
[-180, +180]
1 để chuyển đổi ma trận xoay[-90, +90]
9 thành trục góc
8. Nếu$ python3 ./pyrotation_demo.py q
[-90, +90]
9 là ma trận đồng nhất, thì
8 đều bằng 0, i. e. , thoái hóa$ python3 ./pyrotation_demo.py q
Góc Euler
Sử dụng hàm
[-180, +180]
6 để chuyển đổi các góc [yaw, pitch, roll] theo radian thành ma trận xoay[-90, +90]
9. Ba góc theo thứ tự này. z-yaw, y-pitch, x-rollSử dụng hàm
[-180, +180]
8 để chuyển đổi ma trận xoay thành các góc [yaw, pitch, roll]. Nếu ma trận xoay đại diện cho một phép quay tương ứng với góc tung độ là -pi/2 độ hoặc +pi/2 radian, i. e. ,[-180, +180]
9 là +1 hoặc -1, cờ[-180, +180]
1 được đặt thành
7. Trong trường hợp này, góc cuộn luôn được đặt thành 0>>> import pyrotation
Ma trận xoay
Sử dụng hàm
[-180, +180]
2 để xoay một điểm[-180, +180]
6 bằng một ma trận xoay[-90, +90]
9 và thu được điểm đã xoay[-180, +180]
8. Cả[-180, +180]
6 và[-180, +180]
8 đều là mảng 3 chiều gọn gàngSử dụng hàm
[-180, +180]
8 để xoay một mảng các điểm[-90, +90]
2 bằng một ma trận xoay[-90, +90]
9 và thu được mảng các điểm đã xoay[-90, +90]
4. Cả[-90, +90]
2 và[-90, +90]
4 đều là ma trận 3 nhân numpy trong đó n là số điểmSử dụng hàm
[-90, +90]
4 để chuẩn hóa ma trận xoay[-90, +90]
9 để thu được ma trận chuẩn hóa[-90, +90]
6. Chức năng này sử dụng SVDSử dụng hàm
[-90, +90]
7 để xây dựng ma trận xoay[-90, +90]
9 từ ba vectơ cơ sở trực giao[-90, +90]
9Sử dụng hàm
[-180, +180]
0 để xây dựng ba vectơ cơ sở trực giao[-180, +180]
1 từ một cặp vectơ[-180, +180]
2, trong đó[-180, +180]
3 theo hướng của[-180, +180]
4,[-180, +180]
5 nằm trong mặt phẳng được xác định bởi[-180, +180]
4 và[-180, +180]
7, và[-180, +180]
8 trực giao với mặt phẳng của[-180, +180]
4 và[-180, +180]
7. Trong trường hợp suy biến 1, trong đó[-180, +180]
4 đều bằng 0, thay vào đó,Quaternion
2 được sử dụng. Trong trường hợp suy biến 2, trong đó[-180, +180]
7 đều bằng 0 hoặc[-180, +180]
7 cùng hướng với[-180, +180]
4, thay vào đó,Quaternion
6 được sử dụng. Có ba chức năng trợ giúp dựa trên chức năng nàyQuaternion
7, tôi. e. , xây dựng ma trận xoay[-90, +90]
9 cho trước hai vectơ biểu thị trục x và trục yQuaternion
9, tôi. e. , xây dựng ma trận xoay[-90, +90]
9 cho trước hai vectơ biểu thị trục y và trục z
01, tôi. e. , xây dựng ma trận xoay$ python3 ./pyrotation_demo.py q
[-90, +90]
9 cho trước hai vectơ biểu thị trục z và trục x
Đối với ba hàm trợ giúp này, trục đầu tiên luôn cùng hướng với vectơ được cung cấp đầu tiên. Nếu vectơ được cung cấp thứ hai không trực giao với vectơ, thì một vectơ trên mặt phẳng được xác định bởi hai vectơ này trực giao với vectơ thứ nhất được dựng làm trục thứ hai. Trục thứ ba luôn vuông góc với mặt phẳng xác định bởi hai vectơ đã cho. Hệ quy chiếu luôn thuận tay phải
Đơn vị Đệ tứ
Một quaternion đơn vị được đại diện bởi một đối tượng của lớp Quaternion
được định nghĩa trong mô-đun này. Đối tượng quaternion là bất biến sau khi xây dựng. Tất cả các hoạt động sẽ trả về một đối tượng quaternion mới thay vì tự thay đổi
Một số phương thức đối tượng hữu ích được hiển thị như sau
Sử dụng
04 để lấy chuẩn của bậc bốn$ python3 ./pyrotation_demo.py q
05$ python3 ./pyrotation_demo.py q
Sử dụng
06 để lấy liên hợp của bậc bốn$ python3 ./pyrotation_demo.py q
05, i. e. , nếu$ python3 ./pyrotation_demo.py q
05 là [w, x, y, z], thì$ python3 ./pyrotation_demo.py q
09 là [w, -x, -y, -z]$ python3 ./pyrotation_demo.py q
Sử dụng
10 để lấy nghịch đảo của bậc bốn$ python3 ./pyrotation_demo.py q
05$ python3 ./pyrotation_demo.py q
Sử dụng
12 để lấy phủ định của bậc bốn$ python3 ./pyrotation_demo.py q
05, i. e. , nếu$ python3 ./pyrotation_demo.py q
05 là [w, x, y, z], thì$ python3 ./pyrotation_demo.py q
15 là [-w, -x, -y, -z]$ python3 ./pyrotation_demo.py q
Sử dụng
16 để có thành phần của$ python3 ./pyrotation_demo.py q
17 và$ python3 ./pyrotation_demo.py q
18 là$ python3 ./pyrotation_demo.py q
19, i. e. ,$ python3 ./pyrotation_demo.py q
19 =$ python3 ./pyrotation_demo.py q
17 *$ python3 ./pyrotation_demo.py q
18, trong đó "*" là phép nhân bậc bốn. Lưu ý rằng$ python3 ./pyrotation_demo.py q
17 *$ python3 ./pyrotation_demo.py q
18 thường không bằng$ python3 ./pyrotation_demo.py q
18 *$ python3 ./pyrotation_demo.py q
17$ python3 ./pyrotation_demo.py q
Đối với các phương pháp sau,
$ python3 ./pyrotation_demo.py q
05 phải là một bậc bốn đơn vị và phương pháp này không kiểm tra xem. Nếu $ python3 ./pyrotation_demo.py q
05 không phải là một phần tư đơn vị thì kết quả sẽ saiSử dụng
29 để xoay một điểm$ python3 ./pyrotation_demo.py q
[-180, +180]
6 theo một bậc bốn đơn vị
05 và thu được điểm đã xoay$ python3 ./pyrotation_demo.py q
[-180, +180]
8. Cả[-180, +180]
6 và[-180, +180]
8 đều là mảng 3 chiều gọn gàngSử dụng
35 để xoay một mảng các điểm$ python3 ./pyrotation_demo.py q
[-90, +90]
2 theo một bậc bốn đơn vị
05 và thu được mảng các điểm đã xoay$ python3 ./pyrotation_demo.py q
[-90, +90]
4. Cả[-90, +90]
2 và[-90, +90]
4 đều là ma trận 3 nhân numpy trong đó n là số điểmSử dụng
41 để chuyển đổi một bậc bốn đơn vị$ python3 ./pyrotation_demo.py q
05 thành trục góc$ python3 ./pyrotation_demo.py q
8$ python3 ./pyrotation_demo.py q
Sử dụng
44 để chuyển đổi một bậc bốn đơn vị$ python3 ./pyrotation_demo.py q
05 thành ma trận xoay$ python3 ./pyrotation_demo.py q
[-90, +90]
9
Một số phương thức lớp hữu ích được hiển thị như sau
Sử dụng
47 để xây dựng quaternion đơn vị nhận dạng$ python3 ./pyrotation_demo.py q
48, i. e. , [1, 0, 0, 0]$ python3 ./pyrotation_demo.py q
Sử dụng
49 để chuyển đổi một trục góc$ python3 ./pyrotation_demo.py q
8 thành một bậc bốn đơn vị$ python3 ./pyrotation_demo.py q
05. Trong trường hợp suy biến trong đó$ python3 ./pyrotation_demo.py q
8 đều bằng 0, phần tư đơn vị được trả về$ python3 ./pyrotation_demo.py q
Sử dụng
53 để chuyển đổi ma trận xoay$ python3 ./pyrotation_demo.py q
[-90, +90]
9 thành bậc bốn đơn vị
05$ python3 ./pyrotation_demo.py q
Sử dụng
56 để có được phép nội suy tuyến tính hình cầu [SLERP] của hai bậc bốn đơn vị$ python3 ./pyrotation_demo.py q
57 và$ python3 ./pyrotation_demo.py q
17 với tham số$ python3 ./pyrotation_demo.py q
59. Nếu$ python3 ./pyrotation_demo.py q
59 là 0, thì trả về$ python3 ./pyrotation_demo.py q
57 và nếu$ python3 ./pyrotation_demo.py q
59 là 1, thì trả về$ python3 ./pyrotation_demo.py q
17. Nếu$ python3 ./pyrotation_demo.py q
59 nằm trong khoảng từ 0 đến 1, một bậc bốn đơn vị$ python3 ./pyrotation_demo.py q
05 đại diện cho một phép quay liên tục từ hướng$ python3 ./pyrotation_demo.py q
57 sang hướng$ python3 ./pyrotation_demo.py q
17 tại phân số$ python3 ./pyrotation_demo.py q
59 được trả về$ python3 ./pyrotation_demo.py q