2009-05-22 36 views
5

Trong ứng dụng 3D của tôi, tôi lưu trữ vị trí của đối tượng trong một vec-tơ và nó xoay quanh gốc trong một quaternion. Tôi cần phải xoay đối tượng xung quanh một vector với một nguồn gốc tùy ý. Tôi đã cố gắng chuyển đổi vị trí - vectorOrigin và xoay thành ma trận, xoay ma trận và sau đó trích xuất vị trí và xoay như một vectơ và một quaternion từ ma trận kết quả. Các vị trí đi lên ok, nhưng luân chuyển vẫn không đổi (đối tượng quay xung quanh các vector nhất định nhưng nó luôn luôn phải đối mặt trong cùng một hướng).Làm thế nào để xoay đối tượng xung quanh một điểm bằng cách sử dụng quaternions?

Phương pháp của tôi sai hay tôi có lỗi?

Trả lời

7

Tôi không chắc chắn tại sao bạn mong đợi xoay vòng thay đổi. Bạn có "sinh vật" có lập trình biểu thị điểm xuất phát, điểm đích và xoay vòng. Tính toán điểm đích dựa trên hai "sinh vật" khác không nên ảnh hưởng đến chúng.

Còn cách tiếp cận thông thường thì sao? Nếu bạn cần xoay vị trí (x, y, z) quanh điểm (a, b, c), trước tiên dịch vị trí sao cho vòng xoay sẽ xuất hiện xung quanh nguồn gốc: sử dụng (xa, yb, zc) làm vị trí , xoay quanh gốc như thường lệ để có được vị trí dịch mới (x'-a, y'-b, z'-c), và dịch ngược lại và nhận vị trí mới của bạn (x ', y', z ').

+0

Đây là những gì tôi đang làm. Đối tượng di chuyển xung quanh một vectơ có nguồn gốc tùy ý, nhưng nó luôn hướng về cùng một hướng. Tôi phải đối mặt với nguồn gốc của vectơ. Tôi đã chỉnh sửa câu hỏi để làm rõ thuật toán của mình. – user17544

+0

Nếu tôi hiểu chính xác, bạn cần phải thêm một vòng xoay khác, xung quanh vectơ song song với vectơ bạn đã đề cập, nhưng nó đi qua * tâm * của đối tượng. –

+0

Bạn nói đúng. Tôi giải quyết nó bằng cách xoay đối tượng quanh tâm của nó và sau đó xoay vị trí của đối tượng xung quanh vector đã cho. – user17544

1

Tôi không quen thuộc với quaternions, và có lẽ đây là hoàn toàn offtopic, nhưng bạn không thể xoay một đối tượng 3d xung quanh một điểm, trục quay phải là một dòng.

+0

Không hoàn toàn tắt chủ đề và một điểm tốt ... –

+0

Điểm công bằng. Tôi có nghĩa là xoay quanh một vector với một nguồn gốc tùy ý. Tôi đã chỉnh sửa câu hỏi. – user17544

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