* add the vector project_on_plan method
[hkl.git] / include / hkl / hkl-vector.h
blob4508b4da010b63a0586e7668c49aaa942f20358c
1 #ifndef __HKL_VECTOR_H__
2 #define __HKL_VECTOR_H__
4 #include <stdio.h>
5 #include <math.h>
6 #include <hkl/hkl-macros.h>
8 HKL_BEGIN_DECLS
10 /* forward declaration begin */
11 typedef struct _HklMatrix HklMatrix;
12 typedef struct _HklQuaternion HklQuaternion;
13 /* forward declaration end */
15 typedef struct _HklVector HklVector;
17 struct _HklVector
19 double data[3];
22 extern void hkl_vector_init(HklVector *self, double x, double y, double z);
24 extern void hkl_vector_fprintf(FILE *file, HklVector const *self);
26 extern int hkl_vector_cmp(HklVector const *self, HklVector const *vector);
28 extern int hkl_vector_is_opposite(HklVector const *self,
29 HklVector const *vector);
31 extern void hkl_vector_minus_vector(HklVector *self, HklVector const *vector);
33 extern void hkl_vector_div_double(HklVector *self, double const d);
35 extern void hkl_vector_times_double(HklVector *self, double const d);
37 extern void hkl_vector_times_vector(HklVector *self, HklVector const *vector);
39 extern void hkl_vector_times_smatrix(HklVector *self, HklMatrix const *m);
41 extern double hkl_vector_sum(HklVector const *self);
43 extern double hkl_vector_scalar_product(HklVector const *self,
44 HklVector const *vector);
46 extern void hkl_vector_vectorial_product(HklVector *self,
47 HklVector const *vector);
49 extern double hkl_vector_angle(HklVector const *self,
50 HklVector const *vector);
52 extern double hkl_vector_norm2(HklVector const *self);
54 extern int hkl_vector_normalize(HklVector *self);
56 extern int hkl_vector_is_colinear(HklVector const *self,
57 HklVector const *vector);
59 extern void hkl_vector_randomize(HklVector *self);
61 extern void hkl_vector_randomize_vector(HklVector *self,
62 HklVector const *vector);
64 extern void hkl_vector_randomize_vector_vector(HklVector *self,
65 HklVector const *vector1,
66 HklVector const *vector2);
68 extern void hkl_vector_rotated_around_vector(HklVector *self,
69 HklVector const *axe,
70 double angle);
72 extern void hkl_vector_rotated_quaternion(HklVector *self,
73 HklQuaternion const *q);
75 extern int hkl_vector_is_null(HklVector const *self);
77 extern void hkl_vector_project_on_plan(HklVector *self,
78 HklVector const *plan);
80 HKL_END_DECLS
82 #endif