Python euler đến quaternion

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ất

Chọ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ản

Trong 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 pyquaternion

Mộ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 null

q1 = 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ưới

Ngẫ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()
1

q4 = 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ực
  • q1 = 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
0

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 bất kỳ giá trị nào được cung cấp không thể chuyển đổi thành số thực
  • q1 = 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 numpy

q1 = 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
1

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 bất kỳ nội dung mảng nào không thể chuyển đổi thành số thực
  • q1 = 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
2

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 bất kỳ nội dung dãy số nào không thể chuyển đổi thành số thực
  • q1 = 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ố

  • q3 = Quaternion.random() # called as a class method
    
    1 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
3

tă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ần

q3 = 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ực
  • q3 = 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
4

tă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ố quay

q4 = 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ị radian

Từ 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
5

tăng

  • q1 = Quaternion()
    
    3 nếu thiếu
    >>> from pyquaternion import Quaternion
    
    02
  • q1 = 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 ra

Thông số

  • >>> from pyquaternion import Quaternion
    
    15 có thể là một mảng hoặc ma trận numpy 3x3
  • >>> from pyquaternion import Quaternion
    
    16 có thể là một mảng hoặc ma trận numpy 4x4. Trong trường hợp này, phần dịch mã sẽ bị bỏ qua và chỉ thành phần quay của ma trận sẽ được mã hóa trong quaternion

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
6

Mã 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ố

  • >>> from pyquaternion import Quaternion
    
    20 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
7

tă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ố

  • >>> from pyquaternion import Quaternion
    
    27 - ​​[tùy chọn] - giá trị tuyệt đối lớn nhất mà theo đó định mức có thể khác 1. 0 đối với đối tượng được coi là một quaternion đơn vị. Mặc định là
    >>> from pyquaternion import Quaternion
    
    28

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