Quaternion.h
1 /*
2  Copyright (C) 2008 Alex Diener
3 
4  This software is provided 'as-is', without any express or implied
5  warranty. In no event will the authors be held liable for any damages
6  arising from the use of this software.
7 
8  Permission is granted to anyone to use this software for any purpose,
9  including commercial applications, and to alter it and redistribute it
10  freely, subject to the following restrictions:
11 
12  1. The origin of this software must not be misrepresented; you must not
13  claim that you wrote the original software. If you use this software
14  in a product, an acknowledgment in the product documentation would be
15  appreciated but is not required.
16  2. Altered source versions must be plainly marked as such, and must not be
17  misrepresented as being the original software.
18  3. This notice may not be removed or altered from any source distribution.
19 
20  Alex Diener adiener@sacredsoftware.net
21 */
22 
23 #ifndef __QUATERNION_H__
24 #define __QUATERNION_H__
25 
26 #include "MatrixAlg.h"
27 #include "Vector.h"
28 
29 namespace VoxelFarm
30 {
31  namespace Algebra
32  {
33  typedef struct Quaternion Quaternion;
34 
36  struct Quaternion
37  {
38  float x;
39  float y;
40  float z;
41  float w;
42  };
43 
45  void Quaternion_loadIdentity(Quaternion * quaternion);
49  Quaternion Quaternion_withValues(float x, float y, float z, float w);
50 
54  struct Vector Quaternion_toVector(Quaternion quaternion);
56  Quaternion Quaternion_fromAxisAngle(struct Vector axis, float angle);
58  void Quaternion_toAxisAngle(Quaternion quaternion, struct Vector * axis, float * angle);
60  struct Matrix Quaternion_toMatrix(Quaternion quaternion);
61 
63  void Quaternion_normalize(Quaternion * quaternion);
66 
68  void Quaternion_multiply(Quaternion * quaternion1, Quaternion quaternion2);
70  Quaternion Quaternion_multiplied(Quaternion quaternion1, Quaternion quaternion2);
72  Quaternion Quaternion_slerp(Quaternion start, Quaternion end, float alpha);
73 
75  void Quaternion_rotate(Quaternion * quaternion, struct Vector axis, float angle);
77  Quaternion Quaternion_rotated(Quaternion quaternion, struct Vector axis, float angle);
78 
80  void Quaternion_invert(Quaternion * quaternion);
83 
85  struct Vector Quaternion_multiplyVector(Quaternion quaternion, struct Vector vector);
86  }
87 }
88 
89 #endif
Quaternion Quaternion_fromAxisAngle(struct Vector axis, float angle)
Creates quaternion from axis angle.
void Quaternion_toAxisAngle(Quaternion quaternion, struct Vector *axis, float *angle)
Converts quaternion to axis angle.
Quaternion Quaternion_identity()
Returns identity quaternion.
Contains all classes and functions for the VoxelFarm engine.
Quaternion Quaternion_slerp(Quaternion start, Quaternion end, float alpha)
Interpolates between two quaternions.
A 3D Vector.
Definition: Vector.h:34
Quaternion Quaternion_withValues(float x, float y, float z, float w)
Initializes quaternion.
void Quaternion_rotate(Quaternion *quaternion, struct Vector axis, float angle)
Rotates quaternion.
Quaternion Quaternion_inverted(Quaternion quaternion)
Returns inverted quaternion.
void Quaternion_loadIdentity(Quaternion *quaternion)
Load identity quaternion.
struct Vector Quaternion_toVector(Quaternion quaternion)
Returns vector from quaternion.
A Matrix for 3D operations.
Definition: MatrixAlg.h:38
struct Matrix Quaternion_toMatrix(Quaternion quaternion)
Converts quaternion to Matrix.
Quaternion Quaternion_multiplied(Quaternion quaternion1, Quaternion quaternion2)
Returns mutiplication of quaternion.
Quaternion Quaternion_normalized(Quaternion quaternion)
Returns normalized quaternion.
void Quaternion_invert(Quaternion *quaternion)
Inverts quaternion.
Quaternion Quaternion_rotated(Quaternion quaternion, struct Vector axis, float angle)
Returns rotated quaternion.
void Quaternion_multiply(Quaternion *quaternion1, Quaternion quaternion2)
Multiplies quaternion.
struct Vector Quaternion_multiplyVector(Quaternion quaternion, struct Vector vector)
Returns quaternion to vector multiplication.
A Quaternion object.
Definition: Quaternion.h:36
void Quaternion_normalize(Quaternion *quaternion)
Normalizes quaternion.
Quaternion Quaternion_fromVector(struct Vector vector)
Initializes quaternion from a vector.