2#include <glm/gtx/norm.hpp>
13 DYN_FUNC Vector<T, 3>::Vector(
T x)
19 DYN_FUNC Vector<T, 3>::Vector(
T x,
T y,
T z)
25 DYN_FUNC Vector<T, 3>::Vector(
const Vector<T, 3>& vec)
32 DYN_FUNC Vector<T, 3>::~Vector()
37 DYN_FUNC
T& Vector<T, 3>::operator[] (
unsigned int idx)
39 return const_cast<T &
> (
static_cast<const Vector<T, 3> &
>(*this)[idx]);
43 DYN_FUNC
const T& Vector<T, 3>::operator[] (
unsigned int idx)
const
49 DYN_FUNC
const Vector<T, 3> Vector<T, 3>::operator+ (
const Vector<T, 3> &
vec2)
const
51 return Vector<T, 3>(*
this) +=
vec2;
55 DYN_FUNC Vector<T, 3>& Vector<T, 3>::operator+= (
const Vector<T, 3> &
vec2)
62 DYN_FUNC
const Vector<T, 3> Vector<T, 3>::operator- (
const Vector<T, 3> &
vec2)
const
64 return Vector<T, 3>(*
this) -=
vec2;
68 DYN_FUNC Vector<T, 3>& Vector<T, 3>::operator-= (
const Vector<T, 3> &
vec2)
75 DYN_FUNC
const Vector<T, 3> Vector<T, 3>::operator*(
const Vector<T, 3> &
vec2)
const
77 return Vector<T, 3>(data_[0] *
vec2[0], data_[1] *
vec2[1], data_[2] *
vec2[2]);
81 DYN_FUNC Vector<T, 3>& Vector<T, 3>::operator*=(
const Vector<T, 3> &
vec2)
83 data_[0] *=
vec2.data_[0]; data_[1] *=
vec2.data_[1]; data_[2] *=
vec2.data_[2];
88 DYN_FUNC
const Vector<T, 3> Vector<T, 3>::operator/(
const Vector<T, 3> &
vec2)
const
90 return Vector<T, 3>(data_[0] /
vec2[0], data_[1] /
vec2[1], data_[2] /
vec2[2]);
94 DYN_FUNC Vector<T, 3>& Vector<T, 3>::operator/=(
const Vector<T, 3> &
vec2)
96 data_[0] /=
vec2.data_[0]; data_[1] /=
vec2.data_[1]; data_[2] /=
vec2.data_[2];
100 template <
typename T>
101 DYN_FUNC Vector<T, 3>& Vector<T, 3>::operator=(
const Vector<T, 3> &
vec2)
108 template <
typename T>
109 DYN_FUNC
bool Vector<T, 3>::operator== (
const Vector<T, 3> &
vec2)
const
111 return data_ ==
vec2.data_;
114 template <
typename T>
115 DYN_FUNC
bool Vector<T, 3>::operator!= (
const Vector<T, 3> &
vec2)
const
117 return !((*this) ==
vec2);
120 template <
typename T>
121 DYN_FUNC
const Vector<T, 3> Vector<T, 3>::operator+(
T value)
const
123 return Vector<T, 3>(*
this) += value;
126 template <
typename T>
127 DYN_FUNC Vector<T, 3>& Vector<T, 3>::operator+= (
T value)
133 template <
typename T>
134 DYN_FUNC
const Vector<T, 3> Vector<T, 3>::operator-(
T value)
const
136 return Vector<T, 3>(*
this) -= value;
139 template <
typename T>
140 DYN_FUNC Vector<T, 3>& Vector<T, 3>::operator-= (
T value)
146 template <
typename T>
147 DYN_FUNC
const Vector<T, 3> Vector<T, 3>::operator* (
T scale)
const
149 return Vector<T, 3>(*
this) *=
scale;
152 template <
typename T>
153 Vector<T, 3>& Vector<T, 3>::operator*= (
T scale)
159 template <
typename T>
160 DYN_FUNC
const Vector<T, 3> Vector<T, 3>::operator/ (
T scale)
const
162 return Vector<T, 3>(*
this) /=
scale;
165 template <
typename T>
166 DYN_FUNC Vector<T, 3>& Vector<T, 3>::operator/= (
T scale)
172 template <
typename T>
173 DYN_FUNC
const Vector<T, 3> Vector<T, 3>::operator-(
void)
const
180 template <
typename T>
181 DYN_FUNC
T Vector<T, 3>::norm()
const
183 return glm::length(data_);
186 template <
typename T>
187 DYN_FUNC
T Vector<T, 3>::normSquared()
const
189 return glm::length2(data_);
192 template <
typename T>
193 DYN_FUNC Vector<T, 3>& Vector<T, 3>::normalize()
195 data_ = glm::length(data_) > glm::epsilon<T>() ? glm::normalize(data_) : glm::tvec3<
T>(0, 0, 0);
199 template <
typename T>
200 DYN_FUNC Vector<T, 3> Vector<T, 3>::cross(
const Vector<T, 3>&
vec2)
const
203 res.data_ = glm::cross(data_,
vec2.data_);
207 template <
typename T>
208 DYN_FUNC
T Vector<T, 3>::dot(
const Vector<T, 3>&
vec2)
const
210 return glm::dot(data_,
vec2.data_);
213 template <
typename T>
214 DYN_FUNC Vector<T, 3> Vector<T, 3>::minimum(
const Vector<T, 3>&
vec2)
const
217 res[0] = data_[0] <
vec2[0] ? data_[0] :
vec2[0];
218 res[1] = data_[1] <
vec2[1] ? data_[1] :
vec2[1];
219 res[2] = data_[2] <
vec2[2] ? data_[2] :
vec2[2];
223 template <
typename T>
224 DYN_FUNC Vector<T, 3> Vector<T, 3>::maximum(
const Vector<T, 3>&
vec2)
const
227 res[0] = data_[0] >
vec2[0] ? data_[0] :
vec2[0];
228 res[1] = data_[1] >
vec2[1] ? data_[1] :
vec2[1];
229 res[2] = data_[2] >
vec2[2] ? data_[2] :
vec2[2];
234 template <
typename S,
typename T>
237 return vec * (
T)scale;
This is an implementation of AdditiveCCD based on peridyno.
TEMPLATE_TYPENAME_T MAT4_T scale(MAT4_T const &m, VEC3_T const &v)