// set random // void quaternion_set_random(struct quaternion *quat) { quat->w = (ranrot_rand() & 1023) - 512.0; // -512 to +512; quat->x = (ranrot_rand() & 1023) - 512.0; // -512 to +512 quat->y = (ranrot_rand() & 1023) - 512.0; // -512 to +512 quat->z = (ranrot_rand() & 1023) - 512.0; // -512 to +512 quaternion_normalise(quat); }
void quaternion_from_axisangle(vector4d *q, vector3d *axis, double angle) { double sin_a_2 = sin(angle / 2); double cos_a_2 = cos(angle / 2); q->x = axis->x * sin_a_2; q->y = axis->y * sin_a_2; q->z = axis->z * sin_a_2; q->w = cos_a_2; quaternion_normalise(q); }