16 #define DO_INLINE_VEC3 1
18 #if DO_INLINE_VEC3 >= 1
19 #define VEC3_INLINE inline
28 #include "Foundation/Error.h"
52 static const Vec3 ZERO;
55 VEC3_INLINE
explicit Vec3(
double s);
56 VEC3_INLINE
Vec3(
double,
double,
double);
57 VEC3_INLINE
Vec3(
const Vec3&);
60 VEC3_INLINE Vec3& operator=(
const Vec3&);
61 VEC3_INLINE Vec3& operator=(
double s);
62 VEC3_INLINE Vec3& operator-=(
const Vec3&);
63 VEC3_INLINE Vec3& operator+=(
const Vec3&);
64 VEC3_INLINE Vec3 operator+(
const Vec3&)
const;
65 VEC3_INLINE Vec3 operator-(
const Vec3&)
const;
67 VEC3_INLINE Vec3 operator*(
const Matrix3 &m)
const;
68 VEC3_INLINE
double operator*(
const Vec3&)
const;
69 VEC3_INLINE Vec3 operator-()
const;
72 VEC3_INLINE Vec3 operator*(
double)
const;
73 VEC3_INLINE Vec3& operator*=(
double);
74 VEC3_INLINE Vec3 operator/(
double)
const;
75 VEC3_INLINE Vec3 operator-(
double)
const;
76 VEC3_INLINE Vec3 operator+(
double)
const;
77 VEC3_INLINE Vec3& operator+=(
double);
78 VEC3_INLINE Vec3& operator-=(
double);
81 VEC3_INLINE Vec3& operator/=(
double);
82 VEC3_INLINE
double norm()
const;
83 VEC3_INLINE
double norm2()
const;
84 VEC3_INLINE Vec3 unit()
const;
85 VEC3_INLINE Vec3 unit_s()
const;
86 VEC3_INLINE
double max()
const;
87 VEC3_INLINE
double min()
const;
89 VEC3_INLINE Vec3 rotate(
const Vec3 &axis,
const Vec3 &axisPt)
const;
91 VEC3_INLINE
bool operator==(
const Vec3&)
const;
92 VEC3_INLINE
bool operator!=(
const Vec3&)
const;
94 VEC3_INLINE
friend Vec3 cmax(
const Vec3&,
const Vec3&);
95 VEC3_INLINE
friend Vec3 cmin(
const Vec3&,
const Vec3&);
97 VEC3_INLINE
friend Vec3 cross(
const Vec3&,
const Vec3&);
98 VEC3_INLINE
friend double dot(
const Vec3&,
const Vec3&);
99 VEC3_INLINE
friend Vec3 operator*(
double,
const Vec3&);
102 VEC3_INLINE
void mul_add_and_assign(
const Vec3*,
const Vec3*,
const double&);
103 VEC3_INLINE
void mul_and_assign(
const Vec3*,
const double&);
105 VEC3_INLINE
Vec3(
const VDMulVadd&);
106 VEC3_INLINE Vec3& operator=(
const VDMulVadd&);
108 VEC3_INLINE
Vec3(
const VDMul&);
109 VEC3_INLINE Vec3& operator=(
const VDMul&);
113 VEC3_INLINE
void set_x(
double x) {data[0] = x;}
114 VEC3_INLINE
void set_y(
double y) {data[1] = y;}
115 VEC3_INLINE
void set_z(
double z) {data[2] = z;}
119 VEC3_INLINE
double& X() {
return data[0];};
120 VEC3_INLINE
double& Y() {
return data[1];};
121 VEC3_INLINE
double& Z() {
return data[2];};
122 VEC3_INLINE
double X()
const {
return data[0];};
123 VEC3_INLINE
double Y()
const {
return data[1];};
124 VEC3_INLINE
double Z()
const {
return data[2];};
125 VEC3_INLINE
const double &operator[](
int i)
const {
return data[i];}
126 VEC3_INLINE
double& operator[](
int i) {
return data[i];}
129 VEC3_INLINE
friend ostream& operator << (ostream&,
const Vec3&);
130 VEC3_INLINE
friend istream& operator >> (istream&,Vec3&);
133 bool operator<(
const Vec3&)
const;
141 #if DO_INLINE_VEC3 >= 1
142 #include "Foundation/vec3.hpp"