Ok, thank you for your explanations, I see that it&#39;s not as easy as I hoped it to be. <div><br></div><div>I don&#39;t have very much experience in C++ programming, so I don&#39;t think I can contribute very much in a new method. I use MATLAB alot, and call ITK when heavy computations are needed. I implemented a short ITK script that returns the composite versor using the rotation matrix and translation vector, and it works just fine so thank you very much for your help and insight! </div>
<div><br></div><div>Regards Patrik<br><br><div class="gmail_quote">2009/12/2 Luis Ibanez <span dir="ltr">&lt;<a href="mailto:luis.ibanez@kitware.com">luis.ibanez@kitware.com</a>&gt;</span><br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
Hi Patrik,<br>
<br>
I&#39;m afraid that even if you avoid the Matrices, the combination<br>
of two Versor transforms is still going to be a bit complicated.<br>
<br>
 You can rewrite the transformation:<br>
<div class="im"><br>
               P&#39; = M x P + T<br>
</div>as<br>
              P&#39; = V * P + T<br>
<br>
by using &quot;*&quot; as the composition operator for the Versor &quot;V&quot;,<br>
and still the full conversion will be of the type:<br>
<div class="im"><br>
     P&quot; = V2 * ( P&#39; - C2 ) + T2 + C2<br>
</div>     P&quot; = V2 * ( V1 * ( P - C1)  + T1 + C1 ) + T2 + C2<br>
<br>
and in practice, the implementation of the operator &quot;*&quot;<br>
between Versor and Point ends up being very close<br>
to a Matrix multiplication (actually a bit more expensive<br>
since the intermediate computations are not reused)<br>
<br>
Probably the best way to go is to add to the VersorTransform<br>
class a &quot;Composition()&quot; method, and we pack all this math<br>
above inside. We have similar methods for the Affine Transform.<br>
<br>
<br>
Would you like to give it a first try ?<br>
<br>
<br>
     Luis<br>
<br>
<br>
<br>
-------------------------------------------------------<br>
On Fri, Nov 27, 2009 at 7:23 AM, Patrik Brynolfsson<br>
<div><div></div><div class="h5">&lt;<a href="mailto:patrik.brynolfsson@gmail.com">patrik.brynolfsson@gmail.com</a>&gt; wrote:<br>
&gt; Hello Luis,<br>
&gt; Thanks for the answer and sorry for the double post, I had some problems<br>
&gt; with my mail account.<br>
&gt; I&#39;m using &quot;versorRigid3DTransform&quot;, and from what I&#39;ve gathered all i need<br>
&gt; is to save the versor (1x6) and center of rotation (1x3) to perform the same<br>
&gt; transform again. A while back I tried to extract the rotation matrix and use<br>
&gt; that with the versorRigid3DTransform but from what I recall that was not<br>
&gt; allowed. Perhaps I misremember. Anyway was wondering if there is a way to<br>
&gt; only use the versors and center of rotation to combine the two transforms,<br>
&gt; without the extra step of dealing with matrices?<br>
&gt; Thanks for the detailed explanation in your answer!<br>
&gt; Regards, Patrik<br>
&gt;<br>
&gt; 2009/11/26 Luis Ibanez &lt;<a href="mailto:luis.ibanez@kitware.com">luis.ibanez@kitware.com</a>&gt;<br>
&gt;&gt;<br>
&gt;&gt; Hi Patrik,<br>
&gt;&gt;<br>
&gt;&gt; Each Versor Transform does the equivalent of:<br>
&gt;&gt;<br>
&gt;&gt;                     P&#39;  = Transform(P) = M x P + T<br>
&gt;&gt;<br>
&gt;&gt; Where M is a rotation matrix computed from the Versor parameters,<br>
&gt;&gt; and T is the Translation vector.<br>
&gt;&gt;<br>
&gt;&gt; to be more precise,<br>
&gt;&gt; this Transform also has a Center of rotation &quot;C&quot;,<br>
&gt;&gt; so the actual computation is:<br>
&gt;&gt;<br>
&gt;&gt;    P&#39; = Transform(P) = M x ( P - C ) + T + C<br>
&gt;&gt;<br>
&gt;&gt; Now, when you compose two Versor Transforms you should do:<br>
&gt;&gt;<br>
&gt;&gt;   P&quot; = Transform2( P&#39; ) = Transform2( Transform1( P ) )<br>
&gt;&gt;<br>
&gt;&gt; This leads to:<br>
&gt;&gt;<br>
&gt;&gt;  P&quot; = M2 x ( P&#39; - C2 ) + T2 + C2<br>
&gt;&gt;  P&quot; = M2 x ( M1 x ( P - C1 ) + T1 + C1  - C2 ) + T2 + C2<br>
&gt;&gt;<br>
&gt;&gt; which leads to<br>
&gt;&gt;<br>
&gt;&gt;  P&quot; =  M2 x M1 x ( P - C1 )  + M2x(T1+C1-C2)  + (T2+C2)<br>
&gt;&gt;<br>
&gt;&gt; You can get the matrix M from each transform by calling the<br>
&gt;&gt; method: GetMatrix(); the translation by calling GetTranslation();<br>
&gt;&gt; and the center C by calling the method GetCenter().<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt;    Regards,<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt;         Luis<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt; --------------------------------------------------------<br>
&gt;&gt; On Thu, Nov 26, 2009 at 4:05 AM, Patrik Brynolfsson<br>
&gt;&gt; &lt;<a href="mailto:patrik.brynolfsson@gmail.com">patrik.brynolfsson@gmail.com</a>&gt; wrote:<br>
&gt;&gt; &gt; Hello everyone,<br>
&gt;&gt; &gt; I have a question I hope someone can clarify for me. I want to combine<br>
&gt;&gt; &gt; the<br>
&gt;&gt; &gt; result from two versor transforms. From what I&#39;ve gathered I shouldn&#39;t<br>
&gt;&gt; &gt; add<br>
&gt;&gt; &gt; the elements of the two, but how then? Can someone please explain?<br>
&gt;&gt; &gt; Thanks in advance!<br>
&gt;&gt; &gt; --<br>
&gt;&gt; &gt; Patrik Brynolfsson<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; _____________________________________<br>
&gt;&gt; &gt; Powered by <a href="http://www.kitware.com" target="_blank">www.kitware.com</a><br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; Visit other Kitware open-source projects at<br>
&gt;&gt; &gt; <a href="http://www.kitware.com/opensource/opensource.html" target="_blank">http://www.kitware.com/opensource/opensource.html</a><br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; Kitware offers ITK Training Courses, for more information visit:<br>
&gt;&gt; &gt; <a href="http://www.kitware.com/products/protraining.html" target="_blank">http://www.kitware.com/products/protraining.html</a><br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; Please keep messages on-topic and check the ITK FAQ at:<br>
&gt;&gt; &gt; <a href="http://www.itk.org/Wiki/ITK_FAQ" target="_blank">http://www.itk.org/Wiki/ITK_FAQ</a><br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; Follow this link to subscribe/unsubscribe:<br>
&gt;&gt; &gt; <a href="http://www.itk.org/mailman/listinfo/insight-users" target="_blank">http://www.itk.org/mailman/listinfo/insight-users</a><br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt;<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt; --<br>
&gt; Patrik Brynolfsson<br>
&gt;<br>
&gt;<br>
&gt;<br>
</div></div></blockquote></div><br><br clear="all"><br>-- <br>Patrik Brynolfsson<br><br><br>
</div>