Biểu đồ Python quaternion

chắc chắn test_isclose(). từ quaternion nhập x, y khẳng định np. mảng_equal(bậc bốn. isclose([1e10*x, 1e-7*y], [1. 00001e10*x, 1e-8*y], rtol=1. e-5, atol=2. e-8), np. mảng ([Đúng, Sai])) khẳng định np. mảng_equal(bậc bốn. isclose([1e10*x, 1e-8*y], [1. 00001e10*x, 1e-9*y], rtol=1. e-5, atol=2. e-8), np. mảng ([True, True])) khẳng định np. mảng_equal(bậc bốn. isclose([1e10*x, 1e-8*y], [1. 0001e10*x, 1e-9*y], rtol=1. e-5, atol=2. e-8), np. mảng ([Sai, Đúng])) khẳng định np. mảng_equal(bậc bốn. isclose([x, np. nan*y], [x, np. nan*y]), np. mảng ([Đúng, Sai])) khẳng định np. mảng_equal(bậc bốn. isclose([x, np. nan*y], [x, np. nan*y], equal_nan=True), np. mảng ([True, True])) np. ngẫu nhiên. hạt giống(1234) a = quaternion. as_quat_array(np. ngẫu nhiên. ngẫu nhiên ((3, 5, 4))) khẳng định quaternion. allclose(1e10 * a, 1. 00001e10 * a, rtol=1. e-5, atol=2. e-8, verbose=True) == True khẳng định quaternion. allclose(1e-7 * a, 1e-8 * a, rtol=1. e-5, atol=2. e-8) == Quaternion khẳng định sai. allclose(1e10 * a, 1. 00001e10 * a, rtol=1. e-5, atol=2. e-8, verbose=True) == True khẳng định quaternion. allclose(1e-8 * a, 1e-9 * a, rtol=1. e-5, atol=2. e-8, verbose=True) == True khẳng định quaternion. allclose(1e10 * a, 1. 0001e10 * a, rtol=1. e-5, atol=2. e-8) == Quaternion khẳng định sai. allclose(1e-8 * a, 1e-9 * a, rtol=1. e-5, atol=2. e-8, verbose=True) == True khẳng định quaternion. allclose(np. khó*a, np. nan * a) == Quaternion khẳng định sai. allclose(np. khó*a, np. nan * a, equal_nan=True, verbose=True) == True

Việc lập chỉ mục trong một phép quay được hỗ trợ do nhiều phép biến đổi phép quay có thể được lưu trữ trong một phiên bản duy nhất

Để tạo các đối tượng, hãy sử dụng các phương thức

>>> r = R.from_quat([0, 0, np.sin(np.pi/4), np.cos(np.pi/4)])
8 (xem các ví dụ bên dưới).
>>> r = R.from_quat([0, 0, np.sin(np.pi/4), np.cos(np.pi/4)])
9 không được khởi tạo trực tiếp

Xem thêm

ghi chú

ví dụ

>>> from scipy.spatial.transform import Rotation as R
>>> import numpy as np

Một phiên bản có thể được khởi tạo ở bất kỳ định dạng nào ở trên và được chuyển đổi thành bất kỳ định dạng nào khác. Đối tượng cơ bản độc lập với biểu diễn được sử dụng để khởi tạo

Xét chuyển động quay ngược chiều kim đồng hồ 90 độ quanh trục z. Điều này tương ứng với quaternion sau (ở định dạng vô hướng)

>>> r = R.from_quat([0, 0, np.sin(np.pi/4), np.cos(np.pi/4)])

Vòng quay có thể được thể hiện ở bất kỳ định dạng nào khác

>>> r.as_matrix()
array([[ 2.22044605e-16, -1.00000000e+00,  0.00000000e+00],
[ 1.00000000e+00,  2.22044605e-16,  0.00000000e+00],
[ 0.00000000e+00,  0.00000000e+00,  1.00000000e+00]])
>>> r.as_rotvec()
array([0.        , 0.        , 1.57079633])
>>> r.as_euler('zyx', degrees=True)
array([90.,  0.,  0.])

Vòng quay tương tự có thể được khởi tạo bằng cách sử dụng ma trận xoay

>>> r = R.from_matrix([[0, -1, 0],
..                    [1, 0, 0],
..                    [0, 0, 1]])

Biểu diễn dưới dạng khác

>>> r.as_quat()
array([0.        , 0.        , 0.70710678, 0.70710678])
>>> r.as_rotvec()
array([0.        , 0.        , 1.57079633])
>>> r.as_euler('zyx', degrees=True)
array([90.,  0.,  0.])

Vectơ xoay tương ứng với phép quay này được cho bởi

>>> r = R.from_rotvec(np.pi/2 * np.array([0, 0, 1]))

Biểu diễn dưới dạng khác

________số 8_______

Phương pháp

>>> r.as_matrix()
array([[ 2.22044605e-16, -1.00000000e+00,  0.00000000e+00],
[ 1.00000000e+00,  2.22044605e-16,  0.00000000e+00],
[ 0.00000000e+00,  0.00000000e+00,  1.00000000e+00]])
>>> r.as_rotvec()
array([0.        , 0.        , 1.57079633])
>>> r.as_euler('zyx', degrees=True)
array([90.,  0.,  0.])
2 khá linh hoạt trong phạm vi định dạng đầu vào mà nó hỗ trợ. Ở đây chúng tôi khởi tạo một vòng quay đơn quanh một trục

>>> r = R.from_euler('z', 90, degrees=True)

Một lần nữa, đối tượng là đại diện độc lập và có thể được chuyển đổi sang bất kỳ định dạng nào khác

>>> r.as_quat()
array([0.        , 0.        , 0.70710678, 0.70710678])
>>> r.as_matrix()
array([[ 2.22044605e-16, -1.00000000e+00,  0.00000000e+00],
       [ 1.00000000e+00,  2.22044605e-16,  0.00000000e+00],
       [ 0.00000000e+00,  0.00000000e+00,  1.00000000e+00]])
>>> r.as_rotvec()
array([0.        , 0.        , 1.57079633])

Cũng có thể khởi tạo nhiều phép quay trong một trường hợp duy nhất bằng cách sử dụng bất kỳ hàm

>>> r = R.from_quat([0, 0, np.sin(np.pi/4), np.cos(np.pi/4)])
8 nào. Ở đây chúng tôi khởi tạo một ngăn xếp gồm 3 phép quay bằng phương thức
>>> r.as_matrix()
array([[ 2.22044605e-16, -1.00000000e+00,  0.00000000e+00],
[ 1.00000000e+00,  2.22044605e-16,  0.00000000e+00],
[ 0.00000000e+00,  0.00000000e+00,  1.00000000e+00]])
>>> r.as_rotvec()
array([0.        , 0.        , 1.57079633])
>>> r.as_euler('zyx', degrees=True)
array([90.,  0.,  0.])
2

>>> r = R.from_euler('zyx', [
.. [90, 0, 0],
.. [0, 45, 0],
.. [45, 60, 30]], degrees=True)

Các biểu diễn khác hiện cũng trả về một chồng 3 phép quay. Ví dụ

>>> r = R.from_quat([0, 0, np.sin(np.pi/4), np.cos(np.pi/4)])
0

Áp dụng các phép quay trên vào một vectơ

>>> r = R.from_quat([0, 0, np.sin(np.pi/4), np.cos(np.pi/4)])
1

Một thể hiện có thể được lập chỉ mục và cắt lát như thể nó là một mảng hoặc danh sách 1D duy nhất

>>> r = R.from_quat([0, 0, np.sin(np.pi/4), np.cos(np.pi/4)])
2

Trong thực tế, nó có thể được chuyển đổi thành numpy. mảng

>>> r = R.from_quat([0, 0, np.sin(np.pi/4), np.cos(np.pi/4)])
3

Có thể tạo nhiều phép quay bằng cách sử dụng toán tử

>>> r.as_matrix()
array([[ 2.22044605e-16, -1.00000000e+00,  0.00000000e+00],
[ 1.00000000e+00,  2.22044605e-16,  0.00000000e+00],
[ 0.00000000e+00,  0.00000000e+00,  1.00000000e+00]])
>>> r.as_rotvec()
array([0.        , 0.        , 1.57079633])
>>> r.as_euler('zyx', degrees=True)
array([90.,  0.,  0.])
6

>>> r = R.from_quat([0, 0, np.sin(np.pi/4), np.cos(np.pi/4)])
4

Cuối cùng, cũng có thể đảo ngược các phép quay

>>> r = R.from_quat([0, 0, np.sin(np.pi/4), np.cos(np.pi/4)])
5

Những ví dụ này phục vụ như một cái nhìn tổng quan về lớp và làm nổi bật các chức năng chính. Để biết thêm các ví dụ kỹ lưỡng về phạm vi định dạng đầu vào và đầu ra được hỗ trợ, hãy tham khảo các ví dụ của từng phương pháp