オブジェクトの向きが四元数で表されているとします。 もし私がそのオブジェクトを回転させたいなら、私は単純に回転四元数で四元数を掛けます。クォータニオンで表されるオブジェクトのセットを回転するには?
object.q = q_rotation*(object.q)
次に、小さなオブジェクトのセットで構成されたオブジェクトの場合。どのように回転させるのですか?
class Object
{
public:
std::vector<Object> part;
Point centre; //Point is basically double x, y, z
Quaternion q;
void RotateBy(Quaternion q_rotation);
};
このオブジェクトには2つの部分があります。そして、各部分はそれ自身の中心とqを持つことができ、それらは空間全体(主要オブジェクトの中心に対してではない)に対するものです。
次に、オブジェクトを回転させたいと思います。そのすべての部分も回転して、新しい中心点とqに更新されます。パーツはメインオブジェクトの中心に対して回転します。
どうすればいいですか?私は変換マットでこれを行う方法を示す多くのリンクを見つけました。しかし、クォータニオンで直接それを行う方法はありますか?
多分、言い換えれば、原点をシフトした四元数をどのように回転させるのでしょうか?
ありがとうございました!
このコードは、四元数を掛けるときに役立ちます。 http://stackoverflow.com/questions/10781033/eficient-c-quaternion-multiplication-using-cvmat –