Python xoay điểm quanh trục 3D

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 d

Ma 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/d00001

Bướ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]0000100001

Phé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

Q3 = Q2 Q1 Q2*

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 đầu

Cà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

  1. 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
  2. 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

  3. 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

  1. 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

  2. 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

  3. 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

  4. 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

  1. 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

  2. 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

  3. 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

  4. 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

  5. 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

  1. 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.

    1. "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

    2. "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

    3. "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 đỏ

  2. 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

  3. 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

  1. 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

  2. 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

    1. 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

    2. 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

    3. 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

    $ python3 ./pyrotation_demo.py q
    
    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 ở [-90, +90] độ và
    >>> import pyrotation
    
    1 phải ở [-180, +180] độ

  • Sử dụng hàm

    >>> import pyrotation
    
    3 để chuyển đổi vectơ trục
    $ python3 ./pyrotation_demo.py q
    
    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ờ
    >>> import pyrotation
    
    6 được đặt thành
    >>> import pyrotation
    
    7,
    $ python3 ./pyrotation_demo.py q
    
    9 được đặt thành +90 độ và
    >>> import pyrotation
    
    1 được đặt thành 0 độ. Nếu
    $ python3 ./pyrotation_demo.py q
    
    8 khác không nhưng chỉ vào trục z hoặc đối diện với trục z, cờ [-180, +180]1 được đặt thành
    >>> import pyrotation
    
    7,
    $ python3 ./pyrotation_demo.py q
    
    9 được đặt thành +90 độ và
    >>> import pyrotation
    
    1 được đặt thành 0 độ

  • 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

    $ python3 ./pyrotation_demo.py q
    
    8 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àng

  • Sử 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

    $ python3 ./pyrotation_demo.py q
    
    8 và thu được mảng đ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ểm

  • Sử dụng hàm [-90, +90]7 để chuyển đổi trục góc

    $ python3 ./pyrotation_demo.py q
    
    8 thành ma trận xoay [-90, +90]9. Nếu độ dài của
    $ python3 ./pyrotation_demo.py q
    
    8 bằng 0, ma trận đơn vị được trả về

  • Sử dụng hàm [-180, +180]1 để chuyển đổi ma trận xoay [-90, +90]9 thành trục góc

    $ python3 ./pyrotation_demo.py q
    
    8. Nếu [-90, +90]9 là ma trận đồng nhất, thì
    $ python3 ./pyrotation_demo.py q
    
    8 đều bằng 0, i. e. , thoái hóa

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-roll

  • Sử 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

    >>> import pyrotation
    
    7. Trong trường hợp này, góc cuộn luôn được đặt thành 0

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àng

  • Sử 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ểm

  • Sử 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 SVD

  • Sử 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]9

  • Sử 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 đó, Quaternion2 đượ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 đó, Quaternion6 được sử dụng. Có ba chức năng trợ giúp dựa trên chức năng này

    • Quaternion7, 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 y
    • Quaternion9, 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
    • $ python3 ./pyrotation_demo.py q
      
      01, tôi. e. , xây dựng ma trận xoay [-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

    $ python3 ./pyrotation_demo.py q
    
    04 để lấy chuẩn của bậc bốn
    $ python3 ./pyrotation_demo.py q
    
    05

  • Sử dụng

    $ python3 ./pyrotation_demo.py q
    
    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]

  • Sử dụng

    $ python3 ./pyrotation_demo.py q
    
    10 để lấy nghịch đảo của bậc bốn
    $ python3 ./pyrotation_demo.py q
    
    05

  • Sử dụng

    $ python3 ./pyrotation_demo.py q
    
    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]

  • Sử dụng

    $ python3 ./pyrotation_demo.py q
    
    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

Đố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ẽ sai

  • Sử dụng

    $ python3 ./pyrotation_demo.py q
    
    29 để xoay một điểm [-180, +180]6 theo một bậc bốn đơn vị
    $ python3 ./pyrotation_demo.py q
    
    05 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àng

  • Sử dụng

    $ python3 ./pyrotation_demo.py q
    
    35 để xoay một mảng các điểm [-90, +90]2 theo một bậc bốn đơn vị
    $ python3 ./pyrotation_demo.py q
    
    05 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ểm

  • Sử dụng

    $ python3 ./pyrotation_demo.py q
    
    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

  • Sử dụng

    $ python3 ./pyrotation_demo.py q
    
    44 để chuyển đổi một bậc bốn đơn vị
    $ python3 ./pyrotation_demo.py q
    
    05 thành ma trận xoay [-90, +90]9

Một số phương thức lớp hữu ích được hiển thị như sau

  • Sử dụng

    $ python3 ./pyrotation_demo.py q
    
    47 để xây dựng quaternion đơn vị nhận dạng
    $ python3 ./pyrotation_demo.py q
    
    48, i. e. , [1, 0, 0, 0]

  • Sử dụng

    $ python3 ./pyrotation_demo.py q
    
    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ề

  • Sử dụng

    $ python3 ./pyrotation_demo.py q
    
    53 để chuyển đổi ma trận xoay [-90, +90]9 thành bậc bốn đơn vị
    $ python3 ./pyrotation_demo.py q
    
    05

  • Sử dụng

    $ python3 ./pyrotation_demo.py q
    
    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ề

Chủ Đề