{"id":486,"date":"2016-07-09T09:35:06","date_gmt":"2016-07-09T01:35:06","guid":{"rendered":"http:\/\/www.cgdev.net\/blog\/?p=486"},"modified":"2016-08-13T20:46:34","modified_gmt":"2016-08-13T12:46:34","slug":"dual-quaternion","status":"publish","type":"post","link":"https:\/\/www.cgdev.net\/blog\/486.html","title":{"rendered":"Dual Quaternion"},"content":{"rendered":"<p>In Clifford algebra all units forms a group, so we can construct a unit dual-quaternion from two quaternions q and t where q is a unit rotation quaternion and t is a pure quaternion representing the translation:<\/p>\n<p>\\[<br \/>\nd = (1 + \\frac{1}{2}te)q = q + \\frac{1}{2}tq e<br \/>\n\\]<\/p>\n<p>It&#8217;s unit because<\/p>\n<p>\\begin{align}<br \/>\nd d^* &amp;= (q + \\frac{1}{2}tqe)(q^* &#8211; \\frac{1}{2}q^*t e) \\\\<br \/>\n&amp;= qq^* + (t &#8211; t)\\frac{e}{2} \\\\<br \/>\n&amp;= 1<br \/>\n\\end{align}<\/p>\n<p>Thus<\/p>\n<p>\\[d^{-1} = d^*\\]<\/p>\n<p>If there are 2 unit dual-quaternions \\(d\\) and \\(c\\) we have<\/p>\n<p>\\[<br \/>\n(dc)(dc)^* = dcc^*d^* = dd^* = 1<br \/>\n\\]<\/p>\n<p>Now we examine its action on \\(R^3\\). In Clifford algebra points can be represented with the form: \\( w + ve\\)<\/p>\n<p>\\[ e_{123} + (xe_{23} + ye_{31} + ze_{12})e \\]<\/p>\n<p>the action of the group on the space is given by<\/p>\n<p>\\begin{align}<br \/>\n&amp; (q+\\frac{1}{2}tqe)(w+ve)(q^* &#8211; \\frac{1}{2}q^*te) = w + (qvq^* + h)e<br \/>\n\\end{align}<\/p>\n<p>Where<\/p>\n<p>\\[ h = t_x e_{23} + t_y e_{31} + t_z e_{12} \\]<\/p>\n<p>Another representation of points is using the translation subgroup: let \\(1 + xe\\) be a dual-quaternion that represents a element in \\(R^3\\), the action is<\/p>\n<p>\\begin{align}<br \/>\n&amp; (q + \\frac{1}{2}tq e)(1+xe)(q^* + \\frac{1}{2}q^*te) \\\\<br \/>\n&amp;= (q + qxe + \\frac{1}{2}tqe)(q^* + \\frac{1}{2}q^*te) \\\\<br \/>\n&amp;= 1 + \\frac{1}{2}te + qxq^*e + \\frac{1}{2}te \\\\<br \/>\n&amp;= 1 + (qxq^* + t)e<br \/>\n\\end{align}<\/p>\n<p>So the action on the elements of \\(R^3\\) is a rigid motion:<\/p>\n<p>\\[ v \\mapsto qvq^* + t \\]<\/p>\n<p>We can combine dual-quaternions through multiplication<\/p>\n<p>\\begin{align}<br \/>\n&amp; (q_2 + \\frac{1}{2}t_2 q_2 e)(q_1 + \\frac{1}{2}t_1 q_1 e) \\\\<br \/>\n&amp;= q_2 q_1 + \\frac{1}{2}(t_2 + q_2 t_1 q_2^*)q_2 q_1 e \\\\<br \/>\n&amp;= (1 + \\frac{1}{2}(t_2 + q_2 t_1 q_2^*))q_2 q_1 e<br \/>\n\\end{align}<\/p>\n<p>then we obtain<\/p>\n<p>\\[<br \/>\nv \\mapsto q_2q_1vq_1^*q_2^* + q_2t_1q_2^* +t_2<br \/>\n\\]<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In Clifford algebra all units forms a group, so we can construct a unit dual-quaternion from two quaternions q and t where q is a unit rotation quaternion and t is a pure quaternion representing the translation: \\[ d = (1 + \\frac{1}{2}te)q = q + \\frac{1}{2}tq e \\] It&#8217;s unit because \\begin{align} d d^* [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[8,7],"tags":[],"class_list":["post-486","post","type-post","status-publish","format-standard","hentry","category-graphics","category-math"],"_links":{"self":[{"href":"https:\/\/www.cgdev.net\/blog\/wp-json\/wp\/v2\/posts\/486","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.cgdev.net\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.cgdev.net\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.cgdev.net\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.cgdev.net\/blog\/wp-json\/wp\/v2\/comments?post=486"}],"version-history":[{"count":0,"href":"https:\/\/www.cgdev.net\/blog\/wp-json\/wp\/v2\/posts\/486\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.cgdev.net\/blog\/wp-json\/wp\/v2\/media?parent=486"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.cgdev.net\/blog\/wp-json\/wp\/v2\/categories?post=486"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.cgdev.net\/blog\/wp-json\/wp\/v2\/tags?post=486"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}