Re: [eigen-commits] commit/eigen: ggael: Let's be safe: enable auto normalization is quaternion to angle-axis code since a slight numerical issue may trigger NaN. The overhead is small and I doubt the perf of this function could be critival for any a

[ Thread Index | Date Index | More lists.tuxfamily.org/eigen-commits Archives ]


Le 1 novembre 2010 01:38, Gael Guennebaud <gael.guennebaud@xxxxxxxxx> a écrit :
> On Mon, Nov 1, 2010 at 12:04 AM, Benoit Jacob <jacob.benoit.1@xxxxxxxxx> wrote:
>> Hm...
>>
>> - m_angle = 2*std::acos(q.w());
>> + m_angle = Scalar(2)*std::acos(q.w()/*/internal::sqrt(n2+q.w()*q.w())*/);
>>
>> Tu as mis des commentaires /*...*/ donc ca change rien!
>
> oops, j'ai oublié de décommenter après mes bench....
>
>> Je ne suis pas tres chaud pour auto normaliser dans 1 function alors
>> qu'on ne le fait pas ailleurs! Mais je n'ai pas acces a hg ici donc je
>> n'ai pas pu regarder de pres le code.
>
> oui j'ai aussi pas mal hésité, mais le pb c'est qu'ici il y a un acos,
> et si après quelques manipulations on a w=1.0000000000000000001 et
> bien on se retrouve avec des NaN.

A ce moment la, ne serait-il pas plus sur de contraindre ca
explicitement avec un if, du genre if(x>1) x=1; ?

Comment etre certain que la division que tu fais garantit qu'on n'est pas >1 ?

>
> L'autre raison c'est que le surcout est modéré. Quasi nul pour des
> doubles, et 20% pour des float.
>
> Cela dit j'ai quand même des doutes sur le fait que des erreurs de
> précisions puissent aboutir à des quaternions avec une norme supérieur
> une composante supérieur à 1....

Non c'est credible ca, ca m'est deja arrive, c'est pour ca que quand
je fais des animations je normalise mes rotations a chaque etape. Des
qu'une composante est >1, elle augmente exponentiellement a chaque
etape et devient tres vite aberrante.

Benoit

>
> gael
>
>> Benoit
>>
>> 2010/10/31  <commits-noreply@xxxxxxxxxxxxx>:
>>> 1 new changeset in eigen:
>>>
>>> http://www.bitbucket.org/eigen/eigen/changeset/6a47c9be16c6/
>>> changeset:   r3476:6a47c9be16c6
>>> user:        ggael
>>> date:        2010-10-31 23:26:01
>>> summary:     Let's be safe: enable auto normalization is quaternion to angle-axis code since a slight numerical issue may trigger NaN. The overhead is small and I doubt the perf of this function could be critival for any application !
>>> affected #:  1 file (43 bytes)
>>>
>>> Repository URL: http://bitbucket.org/eigen/eigen/
>>>
>>> --
>>> This is a commit notification from bitbucket.org.
>>> You are receiving this because you have the service
>>> enabled, addressing the recipient of this email.
>>>
>>>
>>>
>>
>>
>>
>
>
>



Mail converted by MHonArc 2.6.19+ http://listengine.tuxfamily.org/