2011-02-07 33 views
7

Với giá trị quaternion, tôi muốn tìm người hàng xóm gần nhất trong một tập hợp các quaternion. Để làm điều này, tôi rõ ràng cần một cách để so sánh "khoảng cách" giữa hai quaternion. Đại diện khoảng cách nào là cần thiết để so sánh như vậy và nó được tính như thế nào?Hàng xóm gần nhất sử dụng Quaternions

Cảm ơn,

Josh

Trả lời

5

là quaternion của bạn chỉ cần một điểm trong không gian 3D không gian với định hướng?

Sau đó, khoảng cách giữa hai quaternion x1,y1,z1,w1x2,y2,x2,w2 được cho bởi:

distance = sqrt((x1-x2)^2 + (y1-y2)^2 + (z1-z2)^2), giả định rằng các thành phần w được sử dụng để định hướng. I E. điều này giống như khoảng cách giữa hai điểm 3D.

Quaternion của bạn có phải là điểm trong không gian 4D không?

Sau đó, khoảng cách giữa chúng được cho bởi:

distance = sqrt((x1-x2)^2 + (y1-y2)^2 + (z1-z2)^2 + (w1-w2)^2).

Đó chỉ là phần mở rộng cho không gian 4D. Công thức euclidean distance hoạt động ở bất kỳ số thứ nguyên nào.

+0

Cảm ơn câu trả lời. Các quaternions được biểu diễn như một điểm trong không gian 4D. Tôi đã sử dụng khoảng cách Euclide như đề xuất, và nó cung cấp kết quả hợp lý. – Josh

+0

Tìm thấy dấu ngoặc đơn bổ sung trong công thức thứ 2 của bạn ở đó, nhưng không thể chỉnh sửa vì nó nhỏ hơn 6 ký tự. Nên là 'khoảng cách = sqrt ((x1-x2)^2 + (y1-y2)^2 + (z1-z2)^2 + (w1-w2)^2)'. Cảm ơn câu trả lời này! – SCCOTTT

1

Điều này thực sự phụ thuộc vào những gì bạn sử dụng quaternion của bạn cho. Một thước đo khoảng cách đơn giản sẽ là giá trị tuyệt đối của sự khác biệt của chúng.

Nếu x = a + bi + cj + dk y = e + fi + gj + hk

hơn khoảng cách Euclide sẽ

|x-y| = sqrt((a-e)² + (b-f)² + (c-g)² + (d-h)²) 
9

Đây là một câu hỏi cũ, nhưng dường như cần thêm một câu trả lời nữa. Nếu quaternion là quaternions chiều dài đơn vị được sử dụng để đại diện cho phép quay, thì khoảng cách Euclide sẽ cho kết quả hài hước bởi vì quaternions cung cấp 2x đại diện dư thừa của không gian quay; tức là, một quaternion và phủ định của nó đại diện cho cùng một hướng. Trong trường hợp này, khoảng cách số liệu chính xác là góc giữa quaternion, hạn chế rơi trong [0,pi/2]:

theta = acos(q1.w*q2.w + q1.x*q2.x + q1.y*q2.y + q1.z*q2.z); 
if (theta>pi/2) theta = pi - theta; 
0

Nếu "khoảng cách" bạn có nghĩa là sự quay vòng cung ngắn nhất giữa 2 phương hướng, hơn đơn giản khoảng cách Euclide là ok (L2 hoặc norm2).

vì góc giữa định hướng có thể được viết như

theta = acos(q1.w*q2.w + q1.x*q2.x + q1.y*q2.y + q1.z*q2.z); 

Thân, lớn hơn L2, khoảng cách lớn hơn.

LƯU Ý: tất cả các quaternion trước truy vấn phải được phủ nhận nếu cung cấp sản phẩm dấu chấm âm. Hơn bạn có thể sử dụng kết hợp KNN thông thường để tăng tốc truy vấn của bạn.

Các vấn đề liên quan