Re: [eigen] Rigid Transformations in eigen: discussion thread |

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

*To*: eigen@xxxxxxxxxxxxxxxxxxx*Subject*: Re: [eigen] Rigid Transformations in eigen: discussion thread*From*: Gael Guennebaud <gael.guennebaud@xxxxxxxxx>*Date*: Fri, 18 Sep 2009 13:31:21 +0200*Dkim-signature*: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:mime-version:received:in-reply-to:references :date:message-id:subject:from:to:content-type :content-transfer-encoding; bh=TqiabwH718LGGYqfv/uGSPVBKrN/2V/Wt9NBnr39dvc=; b=SXdRMxuvGLyPrNUvEG04Kp8FEBxP//knIpnan9PsAudTtYRZhLyK6L7fALTkfnKMWo KPzPikRUjNnWM8na5L6tU3E2jkjfse4RG3RjOoz/ei6FsDjRMLPpug7sONNP5kPDtrzJ /VTZPy7yaecnECOvAMka+gqFwyrpAV9b9vfXA=*Domainkey-signature*: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :content-type:content-transfer-encoding; b=TivxvbhJOLXwQoKPZw+bnGLKqu0b3qIyvdmLAF3XbcAXcQleM7nsamsWcqPTgs/rVy D2kjMLcgXXDIe+oTSUEONmJqBv9ST5IVKcXrmAmOVvo4gvVssRR52NHEOZAT+S05VPho r0Lz0rVAI4xYlio/Zr0cqw52wwYZPcQDW0R4E=

On Fri, Sep 18, 2009 at 1:01 PM, Benoit Jacob <jacob.benoit.1@xxxxxxxxx> wrote: > 2009/9/18 Gael Guennebaud <gael.guennebaud@xxxxxxxxx>: >> On Fri, Sep 18, 2009 at 7:41 AM, Rohit Garg <rpg.314@xxxxxxxxx> wrote: >>>> Yes. So if the user is OK to cope with having to call coeffs(), then >>>> he can do all what he likes, and get optimized code thanks to ET. >>> >>> But for just an interpolation, you should not have to write coeffs() >>> everywhere. :( >>> >>> Is there no other way to get ET without coeffs()? >>> >>> How about the + and the * operator return vec8 expressions, and we >>> provide only 1 assignment operator to take vec8 expression as input? >> >> Another quite simple solution is to add a second template argument >> being the type of the coeffs. By default it would be a Vector8_. For >> instance operator* would be implemented as: >> >> DualQuaternion<Scalar, CwiseUnaryOp<ei_scalar_multiple_op<Scalar>, >> CoeffsTypeOfThis> > operator*(Scalar s) >> { >> return s * m_coeffs; >> } >> >> >> same for operator+: >> >> template<typename OtherCoeffsType> >> DualQuaternion<Scalar, CwiseBinaryOp<ei_scalar_sum_op<Scalar>, >> CoeffsTypeOfThis, OtherCoeffsType> > >> operator+(const DualQuaternion<Scalar, OtherCoeffsType>& other) >> { >> return m_coeffs + other.m_coeffs; >> } >> >> Then you add a ctor and operator= like this: >> >> template<typename OtherCoeffsType> operator=(const >> DualQuaternion<Scalar, OtherCoeffsType>& other) >> { >> m_coeffs = other.m_coeffs; >> } >> >> >> and you're almost done: you still have to take care to evaluate the >> coeffs if needed in the compositing operator* and similar functions. >> >> gael > > One more remark: one can then remove the Scalar parameter, and deduce > it automatically from the CoeffsType as typename CoeffsType::Scalar. maybe it is still worth keeping Scalar so that one can easily declare a DualQuaternion: DualQuaternion<float> dq; For an example of this technique have a look at my auto-diff module in unsupported/. Finally, do you think Quaternion should be implemented this way as well ? I mean for DualQuaternion these two operators are really useful (unlike for Quaternion where slerp is really what you should use), and since dualquat are larger high efficiency require ET (again unlike Quaternion). gael. > Benoit > > PS. Rohit, if this isn't clear, you can always in a first approach > keep the trivial operator+ returning by value and later replace, as > that is API compatible. > > >

**Follow-Ups**:**Re: [eigen] Rigid Transformations in eigen: discussion thread***From:*Rohit Garg

**Re: [eigen] Rigid Transformations in eigen: discussion thread***From:*Benoit Jacob

**References**:**[eigen] Rigid Transformations in eigen: discussion thread***From:*Rohit Garg

**Re: [eigen] Rigid Transformations in eigen: discussion thread***From:*Rohit Garg

**Re: [eigen] Rigid Transformations in eigen: discussion thread***From:*Benoit Jacob

**Re: [eigen] Rigid Transformations in eigen: discussion thread***From:*Rohit Garg

**Re: [eigen] Rigid Transformations in eigen: discussion thread***From:*Benoit Jacob

**Re: [eigen] Rigid Transformations in eigen: discussion thread***From:*Rohit Garg

**Re: [eigen] Rigid Transformations in eigen: discussion thread***From:*Benoit Jacob

**Re: [eigen] Rigid Transformations in eigen: discussion thread***From:*Rohit Garg

**Re: [eigen] Rigid Transformations in eigen: discussion thread***From:*Gael Guennebaud

**Re: [eigen] Rigid Transformations in eigen: discussion thread***From:*Benoit Jacob

**Messages sorted by:**[ date | thread ]- Prev by Date:
**Re: [eigen] Dev branch: Name clash with termios system header** - Next by Date:
**Re: [eigen] Rigid Transformations in eigen: discussion thread** - Previous by thread:
**Re: [eigen] Rigid Transformations in eigen: discussion thread** - Next by thread:
**Re: [eigen] Rigid Transformations in eigen: discussion thread**

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