/** * graphene_euler_reorder: * @e: a #graphene_euler_t * @order: the new order * @res: (out caller-allocates): return location for the reordered * #graphene_euler_t * * Reorders a #graphene_euler_t using @order. * * This function is equivalent to creating a #graphene_quaternion_t from the * given #graphene_euler_t, and then converting the quaternion into another * #graphene_euler_t. * * Since: 1.2 */ void graphene_euler_reorder (const graphene_euler_t *e, graphene_euler_order_t order, graphene_euler_t *res) { graphene_quaternion_t q; graphene_quaternion_init_from_euler (&q, e); graphene_euler_init_from_quaternion (res, &q, order); }
GRAPHENE_TEST_UNIT_END GRAPHENE_TEST_UNIT_BEGIN (euler_quaternion_roundtrip) { graphene_euler_t values[3]; unsigned int i; graphene_euler_init_with_order (&values[0], 0.f, 0.f, 0.f, GRAPHENE_EULER_ORDER_XYZ); graphene_euler_init_with_order (&values[1], 1.f, 0.f, 0.f, GRAPHENE_EULER_ORDER_XYZ); graphene_euler_init_with_order (&values[2], 0.f, 1.f, 0.f, GRAPHENE_EULER_ORDER_ZYX); for (i = 0; i < G_N_ELEMENTS (values); i++) { graphene_quaternion_t q, check; graphene_euler_t e; graphene_quaternion_init_from_euler (&q, &values[i]); graphene_euler_init_from_quaternion (&e, &q, graphene_euler_get_order (&values[i])); graphene_quaternion_init_from_euler (&check, &e); g_assert_true (graphene_quaternion_equal (&q, &check)); } }