2013-01-06 36 views
5

Tôi có một loạt phép đo isometry [R | t] ma trận chuyển đổi, nghĩa là chúng là các phép biến đổi cứng nhắc 3D. Hiện tại tôi lưu trữ chúng dưới dạng Eigen Affine transformations, được biểu thị ở dạng nhỏ gọn, ví dụ: Eigen::AffineCompact3d không lưu trữ hàng cuối cùng [0 0 0 1] dư thừa.Làm thế nào để biểu diễn ma trận biến đổi isometry nhỏ gọn trong Eigen?

Tôi cũng biết rằng có Eigen::Isometry3d mà tôi đoán là typedef của Transform<double, 3, AffineCompact, Isometry>.

Tôi sau Isometry vì, biến dạng nghịch đảo rẻ hơn nhiều (chuyển vị) so với nghịch đảo nghịch đảo chung. Tôi cũng biết rằng tôi có thể vượt qua một gợi ý, khi tôi sử dụng nghịch đảo() là affine_mat.inverse(Eigen::Isometry);

Nhưng tôi muốn nhận được hành vi nghịch đảo đẳng đảo mà không cần phải trả lời một cách thủ công. Nói cách khác, tôi muốn biết, cách tốt nhất để nhân rộng hành vi của Eigen::IsometryCompact3d là gì đáng ngạc nhiên trong API Eigen?

Trả lời

1

Để đại diện cho isometries tôi hiện đang sử dụng twists. Parametrization này có thể được mô tả bởi một vector phần tử 6.

Để chuyển đổi qua lại thành công thức ma trận đồng nhất chuẩn, bạn sẽ cần một vài hàm dựa trên log() và exp() (do đó chuyển đổi sẽ hoạt động chậm).

Soluiton này là thuận lợi nếu bạn không có hạn chế về hiệu suất khi chuyển đổi giữa hai công thức (hoặc bạn hiếm khi làm) hoặc nếu bạn muốn khai thác các thuộc tính của xoắn (ví dụ như tối ưu hóa số)

+0

Có tốt để có một nhóm nói chung represenation nói chung. Nhưng trong trường hợp của tôi, tôi đang thực hiện chuyển đổi rất nhiều vectơ, và biểu diễn ma trận hoạt động tốt nhất cho tôi. Tôi nghĩ rằng các nhà văn Eigen bằng cách nào đó đã bỏ lỡ điều này. – iNFINITEi

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