Ok, I can see your point regarding angular distance. The
issue I'm facing happens for really large angles in my
application I have following 2 quaternions:
q0=
[0]:0.42320069127859006
[1]:-0.52593954473002769
[2]:0.45987326974154225
[3]:0.5768928375077278
and q1=
[0]:-0.50596192324633082
[1]:0.59255532789450238
[2]:-0.38450528029832376
[3]:-0.49501152009970484
a = q0.angularDistance(q1) returns 0.30801826469545818 (
~17.6 deg )
while
q = q0.conjugate() * q1;
b = 2 * std::atan2( q.vec().norm(), std::fabs(q.w()) )
returns 5.9751670424841281 (342.4 deg)
For my understanding if you wanted to ensure (-pi,pi] the
angle should be -17.6 deg
Maybe the atan2 when used with proper quaternions can
never return negative values? So the times 2 is used to
ensure [0,pi) ?
I did not find the derivation of this formula and even if
probably I wouldn't understand it. But at least also here
it is written without the absolute value:
https://en.wikipedia.org/wiki/Quaternions_and_spatial_rotation#Recovering_the_axis-angle_representation
Michael
From: Gael Guennebaud <gael.guennebaud@xxxxxxxxx>
Sent: Wednesday, August 8, 2018 10:13 AM
To: eigen
Subject: Re: [eigen] Why does
Eigen::Quaterniond::angularDistance() method return
the absolute angle?
One reasons is that a distance is expected to be
symmetric and positive. Another one is that the
"sign" is relative to the axis of rotation, so
returning a "signed" angular distance alone does not
seem to make much sense. Perhaps you want:
AngleAxisd aa(q1*q2.conjugate());
and if you really don't care about the axis
defining the sign:
double a = AngleAxisd(q1*q2.conjugate()).angle();
gael
Hi All,
This is my first mailling list mail. So if I
could improve something tell me.
The Issue I face currently with the
Eigen::Quaterniond class is that my application
relies on the signed angle between two
quaternions. Is there a really easy way to get
that sign information I'm not aware of?
I had a look in the history why there is the
numext::abs(d.w()) inside the atan2 call and
found this:
http://eigen.tuxfamily.org/bz/show_bug.cgi?id=824#c1
This is not really an explanation so I wanted
to ask for the reasoning behind the abs.
I would appreciate if you could change this
method or add another one which gives the signed
angle.
Regards,
Michael
The information in
this e-mail is confidential. The contents may
not be disclosed or used by anyone other than
the addressee. Access to this e-mail by anyone
else is unauthorised.
If you are not the intended recipient, please
notify Airbus immediately and delete this
e-mail.
Airbus cannot accept any responsibility for the
accuracy or completeness of this e-mail as it
has been sent over public networks. If you have
any concerns over the content of this message or
its Accuracy or Integrity, please contact Airbus
immediately.
All outgoing e-mails from Airbus are checked
using regularly updated virus scanning software
but you should take whatever measures you deem
to be appropriate to ensure that this message
and any attachments are virus free.
The information in this e-mail
is confidential. The contents may not be disclosed or used
by anyone other than the addressee. Access to this e-mail
by anyone else is unauthorised.
If you are not the intended recipient, please notify
Airbus immediately and delete this e-mail.
Airbus cannot accept any responsibility for the accuracy
or completeness of this e-mail as it has been sent over
public networks. If you have any concerns over the content
of this message or its Accuracy or Integrity, please
contact Airbus immediately.
All outgoing e-mails from Airbus are checked using
regularly updated virus scanning software but you should
take whatever measures you deem to be appropriate to
ensure that this message and any attachments are virus
free.