static void quaternion_inv(const struct quaternion *q, struct quaternion *q_inv)
{
	float mag = quaternion_magnitude(q);
	quaternion_unit_inv(q, q_inv);
	q_inv->w /= mag * mag;
	q_inv->x /= mag * mag;
	q_inv->y /= mag * mag;
	q_inv->z /= mag * mag;
}
示例#2
0
/** 
 * @ingroup quaternion
 * @brief Constrains the values to sane values.  If this is done enough times during the course of program execution, it has the effect of keeping the values on the manifold.
 *
 */
HYPAPI quaternion * quaternion_normalize(quaternion *self)
{
	float mag;
	
	mag = quaternion_magnitude(self);
	
	if (mag == 0.0f)
	{
		/* can't normalize a zero
		 * avoid divide by zero
		 */
		return self;
	}
	
	self->x /= mag;
	self->y /= mag;
	self->z /= mag;
	self->w /= mag;
	
	return self;
}