You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@commons.apache.org by "Albert Huang (JIRA)" <ji...@apache.org> on 2010/04/10 21:52:41 UTC

[jira] Created: (MATH-363) please clarify quaternion conventions in org.apache.commons.math.geometry.Rotation

please clarify quaternion conventions in org.apache.commons.math.geometry.Rotation
----------------------------------------------------------------------------------

                 Key: MATH-363
                 URL: https://issues.apache.org/jira/browse/MATH-363
             Project: Commons Math
          Issue Type: Improvement
    Affects Versions: 2.0
         Environment: all
            Reporter: Albert Huang
            Priority: Minor


Please clarify which quaternion convention is used in the Rotation documentation, and provide constructor methods to use alternate quaternion conventions.

For example, the computer graphics community has standardized on representing a rotation of angle theta about the unit vector (i, j, k)  with the quaternion
{ cos(theta/2), i * sin(theta/2), j * sin(theta/2), k * sin(theta/2) }

e.g., any introductory computer graphics textbook referring to quaternions will describe them in this convention.  This is also the convention appearing on Mathworld, Wikipedia, etc. 

The convention in org.apache.commons.math.geometry.Rotation instead appears to be
{ cos(-theta/2),  i * sin(-theta/2),  j * sin(-theta/2), k * sin(-theta/2) }

Since I'm not likely to convince you to switch conventions, please at least document the convention and provide ways to convert from the alternate (this should be trivial?)

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: https://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

[jira] Resolved: (MATH-363) please clarify quaternion conventions in org.apache.commons.math.geometry.Rotation

Posted by "Luc Maisonobe (JIRA)" <ji...@apache.org>.
     [ https://issues.apache.org/jira/browse/MATH-363?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Luc Maisonobe resolved MATH-363.
--------------------------------

    Resolution: Fixed

The convention has been chosen according to a vectors perspective rather than a frames perspective.
A rotation changes vectors coordinates with respect to frames. If we consider the frame is fixed and the vector changes (which is the convention we used), then the angle represent the motion of the vector. If we consider the vector is fixed but the frame is moving, the angle would represent the motion of the frame. If the vector rotates by theta around vector u, it is the same as if frame would rotate by -theta around u. Both views may be logical, it really depends on the context.

In 3D graphics (as well as in spacecraft attitude determination), vectors are mostly fixed and represent some well determined directions, and rotations are used to get the coordinates of these vectors in various frames (canonical reference frame, observator frame, light source frame, object frame ...). In this perspective, our convention seems odd.

In simulation tools, there is only one reference frame but vectors are moving. In this perspective, out convention is logical.

So I agree this needs to be better explained, but as you guessed we will not change the convention. I have added a more thorough explanation in the constructor involved. You can find it in the subversion repository. Could you check it is understandable and explains what happens ?

Fixed in subversion repository as of r932871.
Thanks for reporting this.

> please clarify quaternion conventions in org.apache.commons.math.geometry.Rotation
> ----------------------------------------------------------------------------------
>
>                 Key: MATH-363
>                 URL: https://issues.apache.org/jira/browse/MATH-363
>             Project: Commons Math
>          Issue Type: Improvement
>    Affects Versions: 2.0
>         Environment: all
>            Reporter: Albert Huang
>            Priority: Minor
>
> Please clarify which quaternion convention is used in the Rotation documentation, and provide constructor methods to use alternate quaternion conventions.
> For example, the computer graphics community has standardized on representing a rotation of angle theta about the unit vector (i, j, k)  with the quaternion
> { cos(theta/2), i * sin(theta/2), j * sin(theta/2), k * sin(theta/2) }
> e.g., any introductory computer graphics textbook referring to quaternions will describe them in this convention.  This is also the convention appearing on Mathworld, Wikipedia, etc. 
> The convention in org.apache.commons.math.geometry.Rotation instead appears to be
> { cos(-theta/2),  i * sin(-theta/2),  j * sin(-theta/2), k * sin(-theta/2) }
> Since I'm not likely to convince you to switch conventions, please at least document the convention and provide ways to convert from the alternate (this should be trivial?)

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: https://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

[jira] Commented: (MATH-363) please clarify quaternion conventions in org.apache.commons.math.geometry.Rotation

Posted by "Albert Huang (JIRA)" <ji...@apache.org>.
    [ https://issues.apache.org/jira/browse/MATH-363?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12857359#action_12857359 ] 

Albert Huang commented on MATH-363:
-----------------------------------

Looks good to me, thanks!

> please clarify quaternion conventions in org.apache.commons.math.geometry.Rotation
> ----------------------------------------------------------------------------------
>
>                 Key: MATH-363
>                 URL: https://issues.apache.org/jira/browse/MATH-363
>             Project: Commons Math
>          Issue Type: Improvement
>    Affects Versions: 2.0
>         Environment: all
>            Reporter: Albert Huang
>            Priority: Minor
>
> Please clarify which quaternion convention is used in the Rotation documentation, and provide constructor methods to use alternate quaternion conventions.
> For example, the computer graphics community has standardized on representing a rotation of angle theta about the unit vector (i, j, k)  with the quaternion
> { cos(theta/2), i * sin(theta/2), j * sin(theta/2), k * sin(theta/2) }
> e.g., any introductory computer graphics textbook referring to quaternions will describe them in this convention.  This is also the convention appearing on Mathworld, Wikipedia, etc. 
> The convention in org.apache.commons.math.geometry.Rotation instead appears to be
> { cos(-theta/2),  i * sin(-theta/2),  j * sin(-theta/2), k * sin(-theta/2) }
> Since I'm not likely to convince you to switch conventions, please at least document the convention and provide ways to convert from the alternate (this should be trivial?)

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: https://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira