-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathquaternioni.h
141 lines (74 loc) · 3.61 KB
/
quaternioni.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
#ifndef QUATERNIONI_H
#define QUATERNIONI_H
template <class X> class Quaternioni {
X componenti [4]; //componenti
public:
Quaternioni<X> & operator = (Quaternioni<X>); //assegnamento
Quaternioni<X> & operator += (Quaternioni<X>); //+=
Quaternioni<X> & operator -= (Quaternioni<X>); //-=
Quaternioni<X> & operator += (const X); //+= num
Quaternioni<X> & operator -= (const X); //-= num
Quaternioni<X> & operator *= (Quaternioni<X>); //*=
Quaternioni<X> & operator *= (X); // *= scalare
Quaternioni<X> & operator /= (X); // /= scalare
template <class Y> Quaternioni <Y> friend operator !(const Quaternioni <Y>); //inverso
template <class Y> Quaternioni <Y> friend operator ~ (const Quaternioni <Y>); //coniugato
template <class Y> bool friend operator == (const Quaternioni<Y> &, const Quaternioni<Y> &);
template <class Y> bool friend operator != (const Quaternioni<Y> &, const Quaternioni<Y> &);
Quaternioni<X> ()=default;
Quaternioni<X> (X , X , X , X );
Quaternioni<X> (X , X *);
Quaternioni<X> rot (Quaternioni<X>) const ;
bool isNorm (double)const;
bool isNorm () const;
double norm () const; //modulo
double angle () const; //angolo di rotazione
X Get_Cr() const; //Getter quaternioni
X Get_Ci() const;
X Get_Cj() const;
X Get_Ck()const;
template <class Y> friend std::ostream & operator << (std::ostream & , const Quaternioni <Y> ); //scrittura
};// [Quaternioni]
template <class X> Quaternioni<X> operator + (Quaternioni<X> const, const Quaternioni<X>);//somma
template <class X> Quaternioni<X> operator - (Quaternioni<X> const, const Quaternioni<X>); //sottrazione
template <class X> Quaternioni<X> operator += ( X, const Quaternioni <X>);//+= num
template <class X> Quaternioni<X> operator -= (X, const Quaternioni <X>); //-= num
template <class X> Quaternioni<X> operator + (const X, const Quaternioni<X>);//num somma
template <class X> Quaternioni<X> operator - (const Quaternioni<X> , const X); //sottrazione num
template <class X> Quaternioni<X> operator + (const X, const Quaternioni<X>);//num somma
template <class X> Quaternioni<X> operator - (const X, const Quaternioni<X>); //num sottrazione
template <class X> Quaternioni<X> operator * (Quaternioni<X> const, const Quaternioni<X>); //prodotto
template <class X> double operator | (const Quaternioni<X>, const Quaternioni<X>); //distanza
template <class X> Quaternioni<X> operator -(const Quaternioni<X> ); // opposto
template <class X> Quaternioni<X> operator +(const Quaternioni<X>); // se stesso medesimo
template <class X> Quaternioni<X> operator * (const Quaternioni<X>, X); // * scalare
template <class X> Quaternioni<X> operator / (const Quaternioni<X>, X); // / scalare
template <class X> Quaternioni<X> operator * (const X, const Quaternioni<X>); // * scalare
template <class X> Quaternioni<X> operator *= (X, const Quaternioni<X>); // *= scalare
template < class X> class SOtre //Struct SO3
{X elemento [3][3];
double s;
public:
SOtre(Quaternioni <X>);
SOtre()=default;
template <class Y> friend std::ostream & operator << (std::ostream & , const SOtre<Y> ) ;//scrittura SO3
X Get_El11() const ; //Getter matrice
X Get_El12() const ;
X Get_El13() const ;
X Get_El21() const ;
X Get_El22() const ;
X Get_El23() const ;
X Get_El31() const ;
X Get_El32() const ;
X Get_El33() const;}; //[SO3]
template < class X> class Vettori{
X coordinate[3];
public:
Vettori()=default;
Vettori(Quaternioni <X>);
template < class Y> friend std::ostream & operator << (std::ostream & , const Vettori<Y> ) ;
X Get_x() const ; //Getter vettori
X Get_y() const ;
X Get_z() const ;
};//[Vettori]
#endif