-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathutil.hpp
79 lines (66 loc) · 1.68 KB
/
util.hpp
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
#ifndef UTIL_HPP
#define UTIL_HPP
template<typename T>
class ThreeElement
{
private:
T x_;
T y_;
T z_;
public:
ThreeElement()
: x_(0), y_(0), z_(0)
{}
ThreeElement(T r, T g, T b)
: x_(r), y_(g), z_(b)
{}
ThreeElement<T>& operator=(const ThreeElement<T>& rhs)
{
this->x_ = rhs.x_;
this->y_ = rhs.y_;
this->z_ = rhs.z_;
return *this;
}
/* add */
ThreeElement<T> operator+(const ThreeElement<T>& rhs)
{
return ThreeElement<T>(this->x_+rhs.x_, this->y_+rhs.y_, this->z_+rhs.z_);
}
template<typename S>
ThreeElement<T> operator+(S s)
{
return ThreeElement<T>(this->x_+s, this->y_+s, this->z_+s);
}
/* sub */
ThreeElement<T> operator-(const ThreeElement<T>& rhs)
{
return ThreeElement<T>(this->x_-rhs.x_, this->y_-rhs.y_, this->z_-rhs.z_);
}
template<typename S>
ThreeElement<T> operator-(S s)
{
return ThreeElement<T>(this->x_-s, this->y_-s, this->z_-s);
}
/* mul */
ThreeElement<T> operator*(const ThreeElement<T>& rhs)
{
return ThreeElement<T>(this->x_*rhs.x_, this->y_*rhs.y_, this->z_*rhs.z_);
}
template<typename S>
ThreeElement<T> operator*(S s)
{
return ThreeElement<T>(this->x_*s, this->y_*s, this->z_*s);
}
/* inner product */
float innex_product(const ThreeElement<T>& rhs)
{
return (this->x_*rhs->x_+this->y_*rhs->y_+this->z_*rhs->z_);
}
/* norm */
ThreeElement<T> norm()
{
float d = sqrt(Sq(this->x_)+Sq(this->y_)+Sq(this->z_));
return ThreeElement<T>(this->x_/d, this->y_/d, this->z_/d);
}
};
#endif /* UTIL_HPP */