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 pyquaternionGhi 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 QuaternionTiế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
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 methodtừ 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
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 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ự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 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ự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
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 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ố 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 5tă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 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ố
- >>> 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 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ố
- >>> 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ị