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: Benoit Jacob <jacob.benoit.1@xxxxxxxxx>
- Date: Fri, 18 Sep 2009 07:01:57 -0400
- 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=MZXQgt34PK8FnYCPqeWZAYscCR8jGfI8tJDAFm/48L4=; b=HfF0aQ0bYsbcpaNJR2W32uCbDd9e5xpc3bcw7NiRDe6CXibxgoQ8Fk+ajIlGfFB7R2 vglt5SpeCjolD7EjHOmN0srjW3ZaRtup5TitMLJ+9tHs2gQG7mVOEQ4m3k/B0nRhHYzX bmuD7QLiDJZioB9CqBNkIIEx4RnSlOX9bdiqQ=
- 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=LtxBmfSSFsDoCJJ8X45gVhyufEnP/7fqfTyQy8WPbYsj2hRLBSGqbG6aEf3luZebJR G4PKz7Jj/9S+Hsxjwv0hyw1vdaTiTXJcxDXovfU2be0FulPXiRNQv2FKvl+jtLulZeK/ rcx5nzqX5X7RgaDrqny4WYbDdvih45JiiyV48=
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.
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.