Eigen access quaternion coefficients data elements

Alec Jacobson

October 24, 2012

weblog/

For some reason, using eigen's Quaternion class I could not figure out how to access the underlying data: the x,y,z,w coefficients of the xi + yi + zi + w quaternion representation. I tried using
Eigen::Quaterniond q;
function_needing_double_pointer(q.data());
but the data() method doesn't exist so you get:
error: 'Eigen::Quaterniond' has no member named 'data'
I also tried just referencing to the first coefficient (which confusingly is x despite the constructor using w,x,y,):
function_needing_double_pointer(q.data());
seems works if you first assign to a pointer, but otherwise you get:
error: lvalue required as unary '&' operand
This seems like the "correct" solution:
function_needing_double_pointer(q.coeffs().data());