Chọn một trang web để nhận nội dung đã dịch nếu có và xem các sự kiện và ưu đãi tại địa phương. Dựa trên vị trí của bạn, chúng tôi khuyên bạn nên chọn. Bạn cũng có thể chọn một trang web từ danh sách sau Làm thế nào để có được hiệu suất trang web tốt nhấtChọn trang Trung Quốc (bằng tiếng Trung hoặc tiếng Anh) để có hiệu suất trang tốt nhất. Các trang web quốc gia khác của MathWorks không được tối ưu hóa cho các lượt truy cập từ vị trí của bạn Mục đích sau đây giúp bạn làm quen với chức năng cơ bản của quaternion trong pyquaternion. Nó cung cấp một điểm vào và một định hướng nhanh (không có ý định chơi chữ) cho những người muốn bị mắc kẹt ngay lập tức. Tóm tắt tính năng toàn diện hơn có thể được tìm thấy trong và tài liệu Nếu bạn muốn tìm hiểu thêm về quaternion và cách chúng áp dụng cho một số vấn đề nhất định, bạn có thể đọc về quaternion tại đây và ứng dụng của chúng đối với phép quay tại đây Cài đặtĐể bắt đầu, bạn sẽ cần cài đặt pyquaternion vào môi trường của mình [Tùy chọn] Nếu bạn đang sử dụng môi trường ảo, hãy chuyển sang hoặc tạo môi trường bạn chọn ngay bây giờ >>> q1 = Quaternion(axis=[1, 0, 0], angle=3.14159265) # Rotate 180 about X
>>> q2 = Quaternion(axis=[0, 1, 0], angle=3.14159265 / 2) # Rotate 90 about Y
>>> q3 = q1 * q2 # Composite rotation of q1 then q2 expressed as standard multiplication
>>> v_prime = q3.rotate(v)
>>> v_prime
array([ 1., 0., 0.])
>>>
8
Bây giờ, hãy sử dụng pip để cài đặt pyquaternion và các phần phụ thuộc của nó $ pip install pyquaternion
Ghi chú. pyquaternion yêu cầu Numpy để biểu diễn mảng và ma trận. Rất có thể nếu bạn đang cần quaternion, bạn đã xử lý tính toán số và bạn đã quen thuộc với numpy. Nếu không, đừng lo lắng, nó sẽ tự động được cài đặt vào môi trường của bạn
Tuyệt vời, giờ bạn đã cài đặt pyquaternion và bạn đã sẵn sàng tung ra thị trường. Hoặc sân. Hay ngáp. Không phán xét ở đây. ) Sử dụng cơ bảnTrong mã của bạn, chỉ cần nhập đối tượng Quaternion từ mô-đun pyquaternion >>> from pyquaternion import Quaternion
Tiếp theo, tạo một đối tượng Quaternion để mô tả phép quay mong muốn của bạn >>> my_quaternion = Quaternion(axis=[1, 0, 0], angle=3.14159265)
Ghi chú. Có nhiều cách để tạo đối tượng Quaternion. Xem phần để có hướng dẫn đầy đủ
Bây giờ bạn có thể thực hiện rất nhiều điều hữu ích với đối tượng quaternion mới của mình. Hãy thử xoay một vectơ >>> import numpy
>>> numpy.set_printoptions(suppress=True) # Suppress insignificant values for clarity
>>> v = numpy.array([0., 0., 1.]) # Unit vector in the +z direction
>>> v_prime = my_quaternion.rotate(v)
>>> v_prime
array([ 0., 0., -1.])
>>>
Một tính năng thú vị của quaternion là chúng có thể được liên kết trực quan với nhau để tạo thành một phép quay tổng hợp từ một chuỗi các phép quay rời rạc >>> q1 = Quaternion(axis=[1, 0, 0], angle=3.14159265) # Rotate 180 about X
>>> q2 = Quaternion(axis=[0, 1, 0], angle=3.14159265 / 2) # Rotate 90 about Y
>>> q3 = q1 * q2 # Composite rotation of q1 then q2 expressed as standard multiplication
>>> v_prime = q3.rotate(v)
>>> v_prime
array([ 1., 0., 0.])
>>>
Quaternion được sử dụng rộng rãi trong hoạt hình để mô tả sự chuyển đổi suôn sẻ giữa các hướng đã biết. Điều này được gọi là phép nội suy. Đây là một ví dụ về một khu vực mà các bậc bốn được ưu tiên hơn so với ma trận xoay vì không thể nội suy trơn tru với ma trận sau. Đây là phép nội suy quaternion đang hoạt động >>> import numpy
>>> numpy.set_printoptions(suppress=True) # Suppress insignificant values for clarity
>>> v = numpy.array([0., 0., 1.]) # Unit vector in the +z direction
>>> q0 = Quaternion(axis=[1, 1, 1], angle=0.0) # Rotate 0 about x=y=z
>>> q1 = Quaternion(axis=[1, 1, 1], angle=2 * 3.14159265 / 3) # Rotate 120 about x=y=z
>>> for q in Quaternion.intermediates(q0, q1, 8, include_endpoints=True):
.. v_prime = q.rotate(v)
.. print(v_prime)
...
[ 0. 0. 1.]
[ 0.14213118 -0.12416109 0.98202991]
[ 0.29457011 -0.22365854 0.92908843]
[ 0.44909878 -0.29312841 0.84402963]
[ 0.59738651 -0.32882557 0.73143906]
[ 0.73143906 -0.32882557 0.59738651]
[ 0.84402963 -0.29312841 0.44909879]
[ 0.92908843 -0.22365854 0.29457012]
[ 0.98202991 -0.12416109 0.14213118]
[ 1. 0. 0.]
Trong đoạn mã trên, biểu thức >>> q1 = Quaternion(axis=[1, 0, 0], angle=3.14159265) # Rotate 180 about X
>>> q2 = Quaternion(axis=[0, 1, 0], angle=3.14159265 / 2) # Rotate 90 about Y
>>> q3 = q1 * q2 # Composite rotation of q1 then q2 expressed as standard multiplication
>>> v_prime = q3.rotate(v)
>>> v_prime
array([ 1., 0., 0.])
>>>
9 trả về một trình vòng lặp trên một chuỗi các đối tượng Đệ tứ mô tả một bộ 10 (8 + 2) phép quay giữa >>> import numpy
>>> numpy.set_printoptions(suppress=True) # Suppress insignificant values for clarity
>>> v = numpy.array([0., 0., 1.]) # Unit vector in the +z direction
>>> q0 = Quaternion(axis=[1, 1, 1], angle=0.0) # Rotate 0 about x=y=z
>>> q1 = Quaternion(axis=[1, 1, 1], angle=2 * 3.14159265 / 3) # Rotate 120 about x=y=z
>>> for q in Quaternion.intermediates(q0, q1, 8, include_endpoints=True):
.. v_prime = q.rotate(v)
.. print(v_prime)
...
[ 0. 0. 1.]
[ 0.14213118 -0.12416109 0.98202991]
[ 0.29457011 -0.22365854 0.92908843]
[ 0.44909878 -0.29312841 0.84402963]
[ 0.59738651 -0.32882557 0.73143906]
[ 0.73143906 -0.32882557 0.59738651]
[ 0.84402963 -0.29312841 0.44909879]
[ 0.92908843 -0.22365854 0.29457012]
[ 0.98202991 -0.12416109 0.14213118]
[ 1. 0. 0.]
0 và >>> import numpy
>>> numpy.set_printoptions(suppress=True) # Suppress insignificant values for clarity
>>> v = numpy.array([0., 0., 1.]) # Unit vector in the +z direction
>>> q0 = Quaternion(axis=[1, 1, 1], angle=0.0) # Rotate 0 about x=y=z
>>> q1 = Quaternion(axis=[1, 1, 1], angle=2 * 3.14159265 / 3) # Rotate 120 about x=y=z
>>> for q in Quaternion.intermediates(q0, q1, 8, include_endpoints=True):
.. v_prime = q.rotate(v)
.. print(v_prime)
...
[ 0. 0. 1.]
[ 0.14213118 -0.12416109 0.98202991]
[ 0.29457011 -0.22365854 0.92908843]
[ 0.44909878 -0.29312841 0.84402963]
[ 0.59738651 -0.32882557 0.73143906]
[ 0.73143906 -0.32882557 0.59738651]
[ 0.84402963 -0.29312841 0.44909879]
[ 0.92908843 -0.22365854 0.29457012]
[ 0.98202991 -0.12416109 0.14213118]
[ 1. 0. 0.]
1. Đầu ra được in sau đó là đường đi của điểm ban đầu tại [0, 0, 1] khi nó được xoay 120 độ quanh x=y=z để kết thúc tại [1, 0, 0]. Điều này có thể dễ dàng được cắm vào khung trực quan để hiển thị các chuỗi xoay hoạt hình mượt mà. Đọc tài liệu đầy đủ về các tính năng nội suyĐể trình diễn đầy đủ nội suy 3D và hoạt hình, hãy chạy tập lệnh >>> import numpy
>>> numpy.set_printoptions(suppress=True) # Suppress insignificant values for clarity
>>> v = numpy.array([0., 0., 1.]) # Unit vector in the +z direction
>>> q0 = Quaternion(axis=[1, 1, 1], angle=0.0) # Rotate 0 about x=y=z
>>> q1 = Quaternion(axis=[1, 1, 1], angle=2 * 3.14159265 / 3) # Rotate 120 about x=y=z
>>> for q in Quaternion.intermediates(q0, q1, 8, include_endpoints=True):
.. v_prime = q.rotate(v)
.. print(v_prime)
...
[ 0. 0. 1.]
[ 0.14213118 -0.12416109 0.98202991]
[ 0.29457011 -0.22365854 0.92908843]
[ 0.44909878 -0.29312841 0.84402963]
[ 0.59738651 -0.32882557 0.73143906]
[ 0.73143906 -0.32882557 0.59738651]
[ 0.84402963 -0.29312841 0.44909879]
[ 0.92908843 -0.22365854 0.29457012]
[ 0.98202991 -0.12416109 0.14213118]
[ 1. 0. 0.]
2 có trong gói pyquaternion. Điều này sẽ yêu cầu một số yếu tố của gói SciPy đầy đủ không bắt buộc đối với chính pyquaternionMột đối tượng Quaternion có thể được tạo theo các cách sau Vỡ nợ>>> import numpy
>>> numpy.set_printoptions(suppress=True) # Suppress insignificant values for clarity
>>> v = numpy.array([0., 0., 1.]) # Unit vector in the +z direction
>>> q0 = Quaternion(axis=[1, 1, 1], angle=0.0) # Rotate 0 about x=y=z
>>> q1 = Quaternion(axis=[1, 1, 1], angle=2 * 3.14159265 / 3) # Rotate 120 about x=y=z
>>> for q in Quaternion.intermediates(q0, q1, 8, include_endpoints=True):
.. v_prime = q.rotate(v)
.. print(v_prime)
...
[ 0. 0. 1.]
[ 0.14213118 -0.12416109 0.98202991]
[ 0.29457011 -0.22365854 0.92908843]
[ 0.44909878 -0.29312841 0.84402963]
[ 0.59738651 -0.32882557 0.73143906]
[ 0.73143906 -0.32882557 0.59738651]
[ 0.84402963 -0.29312841 0.44909879]
[ 0.92908843 -0.22365854 0.29457012]
[ 0.98202991 -0.12416109 0.14213118]
[ 1. 0. 0.]
3
Tạo một quaternion đơn vị >>> import numpy
>>> numpy.set_printoptions(suppress=True) # Suppress insignificant values for clarity
>>> v = numpy.array([0., 0., 1.]) # Unit vector in the +z direction
>>> q0 = Quaternion(axis=[1, 1, 1], angle=0.0) # Rotate 0 about x=y=z
>>> q1 = Quaternion(axis=[1, 1, 1], angle=2 * 3.14159265 / 3) # Rotate 120 about x=y=z
>>> for q in Quaternion.intermediates(q0, q1, 8, include_endpoints=True):
.. v_prime = q.rotate(v)
.. print(v_prime)
...
[ 0. 0. 1.]
[ 0.14213118 -0.12416109 0.98202991]
[ 0.29457011 -0.22365854 0.92908843]
[ 0.44909878 -0.29312841 0.84402963]
[ 0.59738651 -0.32882557 0.73143906]
[ 0.73143906 -0.32882557 0.59738651]
[ 0.84402963 -0.29312841 0.44909879]
[ 0.92908843 -0.22365854 0.29457012]
[ 0.98202991 -0.12416109 0.14213118]
[ 1. 0. 0.]
4. biểu diễn bậc bốn của số thực 1. 0 và biểu diễn của phép quay nullq1 = Quaternion()
Đối với mục đích quay, đây là một quaternion rỗng (không có tác dụng đối với vectơ được quay). Đối với mục đích của phép nhân bậc bốn, đây là một bậc bốn đơn vị (không có tác dụng khi nhân) Sao chép>>> import numpy
>>> numpy.set_printoptions(suppress=True) # Suppress insignificant values for clarity
>>> v = numpy.array([0., 0., 1.]) # Unit vector in the +z direction
>>> q0 = Quaternion(axis=[1, 1, 1], angle=0.0) # Rotate 0 about x=y=z
>>> q1 = Quaternion(axis=[1, 1, 1], angle=2 * 3.14159265 / 3) # Rotate 120 about x=y=z
>>> for q in Quaternion.intermediates(q0, q1, 8, include_endpoints=True):
.. v_prime = q.rotate(v)
.. print(v_prime)
...
[ 0. 0. 1.]
[ 0.14213118 -0.12416109 0.98202991]
[ 0.29457011 -0.22365854 0.92908843]
[ 0.44909878 -0.29312841 0.84402963]
[ 0.59738651 -0.32882557 0.73143906]
[ 0.73143906 -0.32882557 0.59738651]
[ 0.84402963 -0.29312841 0.44909879]
[ 0.92908843 -0.22365854 0.29457012]
[ 0.98202991 -0.12416109 0.14213118]
[ 1. 0. 0.]
5
Sao chép một đối tượng quaternion khác Thông số >>> import numpy
>>> numpy.set_printoptions(suppress=True) # Suppress insignificant values for clarity
>>> v = numpy.array([0., 0., 1.]) # Unit vector in the +z direction
>>> q0 = Quaternion(axis=[1, 1, 1], angle=0.0) # Rotate 0 about x=y=z
>>> q1 = Quaternion(axis=[1, 1, 1], angle=2 * 3.14159265 / 3) # Rotate 120 about x=y=z
>>> for q in Quaternion.intermediates(q0, q1, 8, include_endpoints=True):
.. v_prime = q.rotate(v)
.. print(v_prime)
...
[ 0. 0. 1.]
[ 0.14213118 -0.12416109 0.98202991]
[ 0.29457011 -0.22365854 0.92908843]
[ 0.44909878 -0.29312841 0.84402963]
[ 0.59738651 -0.32882557 0.73143906]
[ 0.73143906 -0.32882557 0.59738651]
[ 0.84402963 -0.29312841 0.44909879]
[ 0.92908843 -0.22365854 0.29457012]
[ 0.98202991 -0.12416109 0.14213118]
[ 1. 0. 0.]
6 phải là một thể hiện Quaternion khác
q2 = Quaternion(q1)
tăng. >>> import numpy
>>> numpy.set_printoptions(suppress=True) # Suppress insignificant values for clarity
>>> v = numpy.array([0., 0., 1.]) # Unit vector in the +z direction
>>> q0 = Quaternion(axis=[1, 1, 1], angle=0.0) # Rotate 0 about x=y=z
>>> q1 = Quaternion(axis=[1, 1, 1], angle=2 * 3.14159265 / 3) # Rotate 120 about x=y=z
>>> for q in Quaternion.intermediates(q0, q1, 8, include_endpoints=True):
.. v_prime = q.rotate(v)
.. print(v_prime)
...
[ 0. 0. 1.]
[ 0.14213118 -0.12416109 0.98202991]
[ 0.29457011 -0.22365854 0.92908843]
[ 0.44909878 -0.29312841 0.84402963]
[ 0.59738651 -0.32882557 0.73143906]
[ 0.73143906 -0.32882557 0.59738651]
[ 0.84402963 -0.29312841 0.44909879]
[ 0.92908843 -0.22365854 0.29457012]
[ 0.98202991 -0.12416109 0.14213118]
[ 1. 0. 0.]
7 nếu đối tượng được cung cấp không phải là một thể hiện của Quaternion hoặc bất kỳ đối số vị trí hợp lệ nào như được nêu bên dướiNgẫu nhiên>>> import numpy
>>> numpy.set_printoptions(suppress=True) # Suppress insignificant values for clarity
>>> v = numpy.array([0., 0., 1.]) # Unit vector in the +z direction
>>> q0 = Quaternion(axis=[1, 1, 1], angle=0.0) # Rotate 0 about x=y=z
>>> q1 = Quaternion(axis=[1, 1, 1], angle=2 * 3.14159265 / 3) # Rotate 120 about x=y=z
>>> for q in Quaternion.intermediates(q0, q1, 8, include_endpoints=True):
.. v_prime = q.rotate(v)
.. print(v_prime)
...
[ 0. 0. 1.]
[ 0.14213118 -0.12416109 0.98202991]
[ 0.29457011 -0.22365854 0.92908843]
[ 0.44909878 -0.29312841 0.84402963]
[ 0.59738651 -0.32882557 0.73143906]
[ 0.73143906 -0.32882557 0.59738651]
[ 0.84402963 -0.29312841 0.44909879]
[ 0.92908843 -0.22365854 0.29457012]
[ 0.98202991 -0.12416109 0.14213118]
[ 1. 0. 0.]
8
Tạo một quaternion ngẫu nhiên mô tả một phép quay được chọn ngẫu nhiên từ một phân phối đồng nhất trên không gian xoay. Nguồn Đây là một phương thức lớp và được gọi là một phương thức của chính lớp đó chứ không phải trên một thể hiện cụ thể q3 = Quaternion.random() # called as a class method
từ vô hướng>>> import numpy
>>> numpy.set_printoptions(suppress=True) # Suppress insignificant values for clarity
>>> v = numpy.array([0., 0., 1.]) # Unit vector in the +z direction
>>> q0 = Quaternion(axis=[1, 1, 1], angle=0.0) # Rotate 0 about x=y=z
>>> q1 = Quaternion(axis=[1, 1, 1], angle=2 * 3.14159265 / 3) # Rotate 120 about x=y=z
>>> for q in Quaternion.intermediates(q0, q1, 8, include_endpoints=True):
.. v_prime = q.rotate(v)
.. print(v_prime)
...
[ 0. 0. 1.]
[ 0.14213118 -0.12416109 0.98202991]
[ 0.29457011 -0.22365854 0.92908843]
[ 0.44909878 -0.29312841 0.84402963]
[ 0.59738651 -0.32882557 0.73143906]
[ 0.73143906 -0.32882557 0.59738651]
[ 0.84402963 -0.29312841 0.44909879]
[ 0.92908843 -0.22365854 0.29457012]
[ 0.98202991 -0.12416109 0.14213118]
[ 1. 0. 0.]
9
Tạo biểu diễn quaternion của một giá trị vô hướng (số thực đơn) Thông số q1 = Quaternion()
0 có thể là số thực hoặc chuỗi biểu thị số thực
Phần ảo của quaternion kết quả sẽ luôn là q1 = Quaternion()
1q4 = Quaternion(4.7349)
q4 = Quaternion(-3)
q4 = Quaternion("4.7349")
q4 = Quaternion("98")
tăng >>> import numpy
>>> numpy.set_printoptions(suppress=True) # Suppress insignificant values for clarity
>>> v = numpy.array([0., 0., 1.]) # Unit vector in the +z direction
>>> q0 = Quaternion(axis=[1, 1, 1], angle=0.0) # Rotate 0 about x=y=z
>>> q1 = Quaternion(axis=[1, 1, 1], angle=2 * 3.14159265 / 3) # Rotate 120 about x=y=z
>>> for q in Quaternion.intermediates(q0, q1, 8, include_endpoints=True):
.. v_prime = q.rotate(v)
.. print(v_prime)
...
[ 0. 0. 1.]
[ 0.14213118 -0.12416109 0.98202991]
[ 0.29457011 -0.22365854 0.92908843]
[ 0.44909878 -0.29312841 0.84402963]
[ 0.59738651 -0.32882557 0.73143906]
[ 0.73143906 -0.32882557 0.59738651]
[ 0.84402963 -0.29312841 0.44909879]
[ 0.92908843 -0.22365854 0.29457012]
[ 0.98202991 -0.12416109 0.14213118]
[ 1. 0. 0.]
7 nếu giá trị đã cung cấp không thể chuyển đổi thành số thựcq1 = Quaternion()
3 nếu chuỗi được cung cấp không thể hiểu là số thực
Từ các yếu tốq1 = Quaternion()
4
Tạo một quaternion bằng cách chỉ định 4 phần tử vô hướng được đánh số thực Thông số q1 = Quaternion()
5 có thể là số thực, chuỗi biểu diễn số thực hoặc kết hợp cả hai
>>> from pyquaternion import Quaternion
0tăng >>> import numpy
>>> numpy.set_printoptions(suppress=True) # Suppress insignificant values for clarity
>>> v = numpy.array([0., 0., 1.]) # Unit vector in the +z direction
>>> q0 = Quaternion(axis=[1, 1, 1], angle=0.0) # Rotate 0 about x=y=z
>>> q1 = Quaternion(axis=[1, 1, 1], angle=2 * 3.14159265 / 3) # Rotate 120 about x=y=z
>>> for q in Quaternion.intermediates(q0, q1, 8, include_endpoints=True):
.. v_prime = q.rotate(v)
.. print(v_prime)
...
[ 0. 0. 1.]
[ 0.14213118 -0.12416109 0.98202991]
[ 0.29457011 -0.22365854 0.92908843]
[ 0.44909878 -0.29312841 0.84402963]
[ 0.59738651 -0.32882557 0.73143906]
[ 0.73143906 -0.32882557 0.59738651]
[ 0.84402963 -0.29312841 0.44909879]
[ 0.92908843 -0.22365854 0.29457012]
[ 0.98202991 -0.12416109 0.14213118]
[ 1. 0. 0.]
7 nếu bất kỳ giá trị nào được cung cấp không thể chuyển đổi thành số thựcq1 = Quaternion()
3 nếu bất kỳ chuỗi nào được cung cấp không thể được hiểu là số thực
Từ một mảng numpyq1 = Quaternion()
8
Tạo một quaternion từ các phần tử của mảng Numpy 4 phần tử Thông số q1 = Quaternion()
9 phải là một mảng numpy gồm 4 phần tử chứa các phần tử có giá trị thực
Các phần tử q2 = Quaternion(q1)
0 của mảng tương ứng với phần thực và từng phần tử ảo tương ứng theo thứ tự q2 = Quaternion(q1)
1>>> from pyquaternion import Quaternion
1tăng >>> import numpy
>>> numpy.set_printoptions(suppress=True) # Suppress insignificant values for clarity
>>> v = numpy.array([0., 0., 1.]) # Unit vector in the +z direction
>>> q0 = Quaternion(axis=[1, 1, 1], angle=0.0) # Rotate 0 about x=y=z
>>> q1 = Quaternion(axis=[1, 1, 1], angle=2 * 3.14159265 / 3) # Rotate 120 about x=y=z
>>> for q in Quaternion.intermediates(q0, q1, 8, include_endpoints=True):
.. v_prime = q.rotate(v)
.. print(v_prime)
...
[ 0. 0. 1.]
[ 0.14213118 -0.12416109 0.98202991]
[ 0.29457011 -0.22365854 0.92908843]
[ 0.44909878 -0.29312841 0.84402963]
[ 0.59738651 -0.32882557 0.73143906]
[ 0.73143906 -0.32882557 0.59738651]
[ 0.84402963 -0.29312841 0.44909879]
[ 0.92908843 -0.22365854 0.29457012]
[ 0.98202991 -0.12416109 0.14213118]
[ 1. 0. 0.]
7 nếu bất kỳ nội dung mảng nào không thể chuyển đổi thành số thựcq1 = Quaternion()
3 nếu mảng chứa ít hơn/nhiều hơn 4 phần tử
Từ một trình tựq2 = Quaternion(q1)
4
Tạo đối tượng quaternion từ một dãy có thứ tự chứa 4 phần tử vô hướng có giá trị thực Thông số q2 = Quaternion(q1)
5 có thể là một danh sách, một bộ, một trình tạo hoặc bất kỳ chuỗi có thể lặp nào chứa 4 giá trị, mỗi giá trị có thể chuyển đổi thành một số thực
Các phần tử tuần tự q2 = Quaternion(q1)
6 của chuỗi tương ứng với phần thực và mỗi phần tử ảo tương ứng theo thứ tự q2 = Quaternion(q1)
1>>> from pyquaternion import Quaternion
2tăng >>> import numpy
>>> numpy.set_printoptions(suppress=True) # Suppress insignificant values for clarity
>>> v = numpy.array([0., 0., 1.]) # Unit vector in the +z direction
>>> q0 = Quaternion(axis=[1, 1, 1], angle=0.0) # Rotate 0 about x=y=z
>>> q1 = Quaternion(axis=[1, 1, 1], angle=2 * 3.14159265 / 3) # Rotate 120 about x=y=z
>>> for q in Quaternion.intermediates(q0, q1, 8, include_endpoints=True):
.. v_prime = q.rotate(v)
.. print(v_prime)
...
[ 0. 0. 1.]
[ 0.14213118 -0.12416109 0.98202991]
[ 0.29457011 -0.22365854 0.92908843]
[ 0.44909878 -0.29312841 0.84402963]
[ 0.59738651 -0.32882557 0.73143906]
[ 0.73143906 -0.32882557 0.59738651]
[ 0.84402963 -0.29312841 0.44909879]
[ 0.92908843 -0.22365854 0.29457012]
[ 0.98202991 -0.12416109 0.14213118]
[ 1. 0. 0.]
7 nếu bất kỳ nội dung dãy số nào không thể chuyển đổi thành số thựcq1 = Quaternion()
3 nếu dãy chứa ít hơn/nhiều hơn 4 phần tử
Rõ ràng theo yếu tốq3 = Quaternion.random() # called as a class method
0
Chỉ định từng phần tử, sử dụng bất kỳ chuỗi nhãn được sắp xếp nào Thông số >>> from pyquaternion import Quaternion
3tăng. Hành vi ngoại lệ giống như khởi tạo theo phần tử như được mô tả ở trên Rõ ràng theo thành phầnq3 = Quaternion.random() # called as a class method
2 hoặc q3 = Quaternion.random() # called as a class method
3
Chỉ định các phần vô hướng (thực) và vectơ (ảo) của quaternion mong muốn Thông số q3 = Quaternion.random() # called as a class method
4 hoặc q3 = Quaternion.random() # called as a class method
5 có thể là số thực hoặc chuỗi biểu thị số thựcq3 = Quaternion.random() # called as a class method
6 hoặc q3 = Quaternion.random() # called as a class method
7 có thể là một dãy hoặc mảng numpy chứa 3 số thực
Một trong hai thành phần (nhưng không phải cả hai) có thể vắng mặt, q3 = Quaternion.random() # called as a class method
8 hoặc trống và sẽ được coi là bằng 0 trong trường hợp đó>>> from pyquaternion import Quaternion
4tăng. q1 = Quaternion()
3 nếu thành phần q4 = Quaternion(4.7349)
q4 = Quaternion(-3)
q4 = Quaternion("4.7349")
q4 = Quaternion("98")
0 hoặc q4 = Quaternion(4.7349)
q4 = Quaternion(-3)
q4 = Quaternion("4.7349")
q4 = Quaternion("98")
1 chứa ít hơn/nhiều hơn 3 phần tửRõ ràng bởi các thông số quayq4 = Quaternion(4.7349)
q4 = Quaternion(-3)
q4 = Quaternion("4.7349")
q4 = Quaternion("98")
2 hoặc q4 = Quaternion(4.7349)
q4 = Quaternion(-3)
q4 = Quaternion("4.7349")
q4 = Quaternion("98")
3 hoặc q4 = Quaternion(4.7349)
q4 = Quaternion(-3)
q4 = Quaternion("4.7349")
q4 = Quaternion("98")
4
Chỉ định góc (đủ điều kiện là radian hoặc độ) để xoay quanh một vectơ trục [x, y, z] được mô tả bởi đối tượng quaternion Tham số q4 = Quaternion(4.7349)
q4 = Quaternion(-3)
q4 = Quaternion("4.7349")
q4 = Quaternion("98")
5 có thể là một dãy hoặc mảng có nhiều mảng chứa 3 số thực. Nó có thể có bất kỳ độ lớn nào ngoại trừ q4 = Quaternion(4.7349)
q4 = Quaternion(-3)
q4 = Quaternion("4.7349")
q4 = Quaternion("98")
6. q4 = Quaternion(4.7349)
q4 = Quaternion(-3)
q4 = Quaternion("4.7349")
q4 = Quaternion("98")
7 [tùy chọn] một số thực hoặc một chuỗi biểu thị một số thực theo đơn vị radian. q4 = Quaternion(4.7349)
q4 = Quaternion(-3)
q4 = Quaternion("4.7349")
q4 = Quaternion("98")
8 [tùy chọn] một số thực hoặc một chuỗi biểu thị một số thực theo độ. q4 = Quaternion(4.7349)
q4 = Quaternion(-3)
q4 = Quaternion("4.7349")
q4 = Quaternion("98")
9 [tùy chọn] một số thực hoặc một chuỗi biểu thị một số thực theo đơn vị radianTừ khóa >>> from pyquaternion import Quaternion
00 (radian/độ/góc) có thể không có, q3 = Quaternion.random() # called as a class method
8 hoặc trống và sẽ được coi là bằng 0 trong trường hợp đó, nhưng từ khóa >>> from pyquaternion import Quaternion
02 phải được cung cấp để mô tả một phép quay có ý nghĩa>>> from pyquaternion import Quaternion
5tăng q1 = Quaternion()
3 nếu thiếu >>> from pyquaternion import Quaternion
02q1 = Quaternion()
3 nếu >>> from pyquaternion import Quaternion
02 chứa ít hơn/nhiều hơn 3 phần tử>>> import numpy
>>> numpy.set_printoptions(suppress=True) # Suppress insignificant values for clarity
>>> v = numpy.array([0., 0., 1.]) # Unit vector in the +z direction
>>> q0 = Quaternion(axis=[1, 1, 1], angle=0.0) # Rotate 0 about x=y=z
>>> q1 = Quaternion(axis=[1, 1, 1], angle=2 * 3.14159265 / 3) # Rotate 120 about x=y=z
>>> for q in Quaternion.intermediates(q0, q1, 8, include_endpoints=True):
.. v_prime = q.rotate(v)
.. print(v_prime)
...
[ 0. 0. 1.]
[ 0.14213118 -0.12416109 0.98202991]
[ 0.29457011 -0.22365854 0.92908843]
[ 0.44909878 -0.29312841 0.84402963]
[ 0.59738651 -0.32882557 0.73143906]
[ 0.73143906 -0.32882557 0.59738651]
[ 0.84402963 -0.29312841 0.44909879]
[ 0.92908843 -0.22365854 0.29457012]
[ 0.98202991 -0.12416109 0.14213118]
[ 1. 0. 0.]
7 nếu >>> from pyquaternion import Quaternion
08 không thể hiểu là số thực>>> from pyquaternion import Quaternion
09 nếu >>> from pyquaternion import Quaternion
02 có độ dài bằng 0
Rõ ràng bằng phép quay hoặc ma trận biến đổi>>> from pyquaternion import Quaternion
11 hoặc >>> from pyquaternion import Quaternion
12
Chỉ định ma trận xoay 3x3 (_______2_______13) hoặc ma trận biến đổi 4x4 ( >>> from pyquaternion import Quaternion
14) mà từ đó phép quay của bậc bốn sẽ được tạo raThông số Quan trọng. Thành phần xoay của ma trận được cung cấp phải là một phép quay thuần túy. e. trực giao đặc biệt >>> from pyquaternion import Quaternion
6Mã này sử dụng một sửa đổi của thuật toán được mô tả trong Converting a Rotation Matrix to a Quaternion, chính thuật toán này dựa trên phương pháp được mô tả tại đây Ghi chú. Cả ma trận và bậc bốn đều tránh các điểm kỳ dị và sự gián đoạn liên quan đến phép quay trong 3 chiều bằng cách thêm các chiều bổ sung. Điều này có tác dụng là các giá trị khác nhau có thể biểu thị cùng một phép quay, ví dụ bậc bốn q và -q biểu thị cùng một phép quay. Do đó, có thể khi chuyển đổi một chuỗi xoay, đầu ra có thể nhảy giữa các dạng tương đương này. Điều này có thể gây ra sự cố trong đó các thao tác tiếp theo như phân biệt được thực hiện trên dữ liệu này. Lập trình viên nên lưu ý vấn đề này tăng q1 = Quaternion()
3 nếu ma trận không phải là 3x3 hoặc 4x4 hoặc nếu ma trận không trực giao đặc biệt>>> import numpy
>>> numpy.set_printoptions(suppress=True) # Suppress insignificant values for clarity
>>> v = numpy.array([0., 0., 1.]) # Unit vector in the +z direction
>>> q0 = Quaternion(axis=[1, 1, 1], angle=0.0) # Rotate 0 about x=y=z
>>> q1 = Quaternion(axis=[1, 1, 1], angle=2 * 3.14159265 / 3) # Rotate 120 about x=y=z
>>> for q in Quaternion.intermediates(q0, q1, 8, include_endpoints=True):
.. v_prime = q.rotate(v)
.. print(v_prime)
...
[ 0. 0. 1.]
[ 0.14213118 -0.12416109 0.98202991]
[ 0.29457011 -0.22365854 0.92908843]
[ 0.44909878 -0.29312841 0.84402963]
[ 0.59738651 -0.32882557 0.73143906]
[ 0.73143906 -0.32882557 0.59738651]
[ 0.84402963 -0.29312841 0.44909879]
[ 0.92908843 -0.22365854 0.29457012]
[ 0.98202991 -0.12416109 0.14213118]
[ 1. 0. 0.]
7 nếu ma trận sai loại
Rõ ràng bởi một mảng numpy>>> from pyquaternion import Quaternion
19
Chỉ định 4 mảng gọn gàng gồm các phần tử bậc bốn được gán trực tiếp cho biểu diễn vectơ bên trong của đối tượng bậc bốn Điều này trực tiếp hơn và có thể nhanh hơn so với việc cung cấp một mảng có nhiều mảng làm đối số vị trí cho trình khởi tạo Thông số Các phần tử q2 = Quaternion(q1)
0 của mảng tương ứng với phần thực và từng phần tử ảo tương ứng theo thứ tự q2 = Quaternion(q1)
1>>> from pyquaternion import Quaternion
7tăng. q1 = Quaternion()
3 nếu vectơ mảng chứa ít hơn/nhiều hơn 4 phần tửPhần này xác định các tính năng có sẵn cho các đối tượng Quaternion của pyquaternion Các ví dụ mã dưới đây giả định sự tồn tại của một đối tượng Quaternion. Bạn có thể tạo lại điều này bằng cách chạy phần sau trong trình thông dịch Python mà bạn chọn >>> from pyquaternion import Quaternion
8định mức>>> from pyquaternion import Quaternion
24 hoặc >>> from pyquaternion import Quaternion
25
Định mức L2 của vectơ 4 bậc bốn Đây phải là 1. 0 cho một quaternion đơn vị (versor) trả lại. một số thực vô hướng biểu thị căn bậc hai của tổng bình phương các phần tử của bậc bốn >>> from pyquaternion import Quaternion
9>>> from pyquaternion import Quaternion
26
Thông số trả lại. >>> from pyquaternion import Quaternion
29 nếu đối tượng Đệ tứ có chiều dài đơn vị nằm trong giá trị dung sai đã chỉ định. >>> from pyquaternion import Quaternion
30 ngược lạiđảo ngược>>> from pyquaternion import Quaternion
31
Nghịch đảo của đối tượng quaternion Đối với một quaternion đơn vị, đây là phép quay nghịch đảo, i. e. khi kết hợp với phép quay ban đầu, sẽ dẫn đến phép quay null trả lại. một đối tượng Quaternion mới đại diện cho đối tượng được nâng lên sức mạnh của đầu vào. Nếu đối tượng cơ sở là một bậc bốn đơn vị, thì kết quả được đảm bảo là một bậc bốn đơn vị
Làm cách nào để chuyển đổi Euler sang quaternion trong Python?
Cách chuyển đổi góc Euler thành bậc bốn bằng Python . Xoay quanh trục x = góc cuộn = α Xoay quanh trục y = góc nghiêng = β Xoay quanh trục z = góc nghiêng = γ
Vòng quay nội tại và bên ngoài là gì?
Nội tại vs. phép quay ngoài. Trong một hệ nội tại, mỗi phép quay phần tử được thực hiện trên hệ tọa độ như được xoay bởi (các) thao tác trước đó. Trong một hệ thống bên ngoài, mỗi vòng quay được thực hiện xung quanh các trục của hệ tọa độ thế giới, không di chuyển
phép nhân bậc bốn là gì?
Phép nhân của một bậc bốn, q, với nghịch đảo của nó, q − 1 , dẫn đến . Một quaternion có độ dài đơn vị (còn được gọi ở đây là quaternion đơn vị), , được tạo bằng cách chia từng thành phần trong số bốn thành phần cho căn bậc hai của tổng bình phương của các thành phần đó (Eq. 2. 28). . A unit-length quaternion (also referred to here as a unit quaternion), , is created by dividing each of the four components by the square root of the sum of the squares of those components (Eq. 2.28). |