The spica renderer
normal3d.h
1 #ifdef _MSC_VER
2 #pragma once
3 #endif
4 
5 #ifndef _SPICA_NORMAL3D_H_
6 #define _SPICA_NORMAL3D_H_
7 
8 #include <string>
9 #include <type_traits>
10 
11 #include "core/vect_math.h"
12 
13 namespace spica {
14 
15 template <class T>
16 class Normal3_ {
17 public:
18  // Public methods
19  Normal3_();
20  Normal3_(T x, T y, T z);
21  explicit Normal3_(const Vector3_<T>& v);
22  Normal3_(const Normal3_<T>& n);
23  ~Normal3_();
24 
25  Normal3_<T>& operator=(const Normal3_<T>& n);
26  bool operator==(const Normal3_<T>& n) const;
27  bool operator!=(const Normal3_<T>& n) const;
28  Normal3_<T> operator-() const;
29  Normal3_<T> operator+=(const Normal3_<T>& n);
30  Normal3_<T> operator-=(const Normal3_<T>& n);
31  Normal3_<T> operator*=(T s);
32  Normal3_<T> operator/=(T s);
33  T operator[](int i) const;
34  explicit operator Vector3_<T>() const;
35 
36  inline T x() const { return x_; }
37  inline T y() const { return y_; }
38  inline T z() const { return z_; }
39 
40  double norm() const;
41  double squaredNorm() const;
42  Normal3_<T> normalized() const;
43 
44  std::string toString() const;
45 
46  using type = T;
47 
48 private:
49  // Private fields
50  T x_, y_, z_;
51 
52  static_assert(std::is_arithmetic<T>::value,
53  "Template type must be arithmetic!!");
54 };
55 
56 using Normal3f = Normal3_<float>;
57 using Normal3d = Normal3_<double>;
58 
59 } // namespace spica
60 
61 template <class T>
62 std::ostream& operator<<(std::ostream& os, const spica::Normal3_<T>& n);
63 
64 template <class T>
65 spica::Normal3_<T> operator+(const spica::Normal3_<T>& n1, const spica::Normal3_<T>& n2);
66 
67 template <class T>
68 spica::Normal3_<T> operator-(const spica::Normal3_<T>& n1, const spica::Normal3_<T>& n2);
69 
70 template <class T>
71 spica::Normal3_<T> operator*(const spica::Normal3_<T>& n, T s);
72 
73 template <class T>
74 spica::Normal3_<T> operator*(T s, const spica::Normal3_<T>& n);
75 
76 template <class T>
77 spica::Normal3_<T> operator/(const spica::Normal3_<T>& n, T s);
78 
79 
80 #include "normal3d_detail.h"
81 
82 #endif // _SPICA_NORMAL3D_H_
Definition: core.hpp:74