33#ifndef __H__COMMON__MATH_VECTOR_FUNCTIONS__
34#define __H__COMMON__MATH_VECTOR_FUNCTIONS__
49template <
typename vector_target_t,
typename vector_source_t>
50void VecCopy(vector_target_t& target,
const vector_source_t& source,
51 typename vector_target_t::value_type
fill);
58template <
typename vector_t>
61VecAppend(vector_t& vOut,
const vector_t& v1);
65template <
typename vector_t>
68VecAppend(vector_t& vOut,
const vector_t& v1,
const vector_t& v2);
72template <
typename vector_t>
75VecAppend(vector_t& vOut,
const vector_t& v1,
const vector_t& v2,
80template <
typename vector_t>
83VecAppend(vector_t& vOut,
const vector_t& v1,
const vector_t& v2,
84 const vector_t& v3,
const vector_t& v4);
91template <
typename vector_t>
94VecScaleAppend(vector_t& vOut,
typename vector_t::value_type s1,
const vector_t& v1);
98template <
typename vector_t>
101VecScaleAppend(vector_t& vOut,
typename vector_t::value_type s1,
const vector_t& v1,
102 typename vector_t::value_type s2,
const vector_t& v2);
106template <
typename vector_t>
109VecScaleAppend(vector_t& vOut,
typename vector_t::value_type s1,
const vector_t& v1,
110 typename vector_t::value_type s2,
const vector_t& v2,
111 typename vector_t::value_type s3,
const vector_t& v3);
115template <
typename vector_t>
118VecScaleAppend(vector_t& vOut,
typename vector_t::value_type s1,
const vector_t& v1,
119 typename vector_t::value_type s2,
const vector_t& v2,
120 typename vector_t::value_type s3,
const vector_t& v3,
121 typename vector_t::value_type s4,
const vector_t& v4);
129template <
typename vector_t>
132VecAdd(vector_t& vOut,
const vector_t& v1,
const vector_t& v2);
136template <
typename vector_t>
139VecAdd(vector_t& vOut,
const vector_t& v1,
const vector_t& v2,
144template <
typename vector_t>
147VecAdd(vector_t& vOut,
const vector_t& v1,
const vector_t& v2,
148 const vector_t& v3,
const vector_t& v4);
155template <
typename vector_t>
158VecSubtract(vector_t& vOut,
const vector_t& v1,
const vector_t& v2);
162template <
typename vector_t>
165VecPow(vector_t& vOut,
const vector_t& v1,
typename vector_t::value_type s);
173template <
typename vector_t>
176VecScale(vector_t& vOut,
const vector_t& v,
typename vector_t::value_type s);
183template <
typename vector_t>
186VecScaleAdd(vector_t& vOut,
typename vector_t::value_type s1,
const vector_t& v1,
187 typename vector_t::value_type s2,
const vector_t& v2);
191template <
typename vector_t>
194VecScaleAdd(vector_t& vOut,
typename vector_t::value_type s1,
const vector_t& v1,
195 typename vector_t::value_type s2,
const vector_t& v2,
196 typename vector_t::value_type s3,
const vector_t& v3);
200template <
typename vector_t>
203VecScaleAdd(vector_t& vOut,
typename vector_t::value_type s1,
const vector_t& v1,
204 typename vector_t::value_type s2,
const vector_t& v2,
205 typename vector_t::value_type s3,
const vector_t& v3,
206 typename vector_t::value_type s4,
const vector_t& v4);
212template <
typename vector_t>
216 typename vector_t::value_type interpAmount);
222template <
typename vector_t>
224typename vector_t::value_type
228template <
typename vector_t>
230typename vector_t::value_type
237template <
typename vector_t>
239typename vector_t::value_type
243template <
typename vector_t>
245typename vector_t::value_type
246VecDistance(
const vector_t& v1,
const vector_t& v2);
252template <
typename vector_t>
254typename vector_t::value_type
255VecDot(
const vector_t& v1,
const vector_t& v2);
260template <
typename vector_t>
262typename vector_t::value_type
263VecAngle(
const vector_t& v1,
const vector_t& v2);
270template <
typename vector_t>
272typename vector_t::value_type
278template <
typename vector_t>
281VecCross(vector_t& vOut,
const vector_t& v1,
const vector_t& v2);
289 MathVector<dim> & result,
290 const MathVector<dim> & v_1,
const MathVector<dim> & v_2
296template <
typename vector_t>
306template <
typename vector_t>
310 const vector_t& v2,
const vector_t& v3);
317template <
typename vector_t>
321 const vector_t& v2,
const vector_t& v3);
328template <
typename vector_t>
331VecSet(vector_t& vInOut,
typename vector_t::value_type s);
334template <
typename vector_t>
337VecAdd(vector_t& vOut,
const vector_t& v,
typename vector_t::value_type s);
340template <
typename vector_t>
343VecSubtract(vector_t& vOut,
const vector_t& v,
typename vector_t::value_type s);
347template <
typename vector_t>
349typename vector_t::value_type
352template <
typename vector_t>
354typename vector_t::value_type
357template <
typename vector_t>
359typename vector_t::value_type
362template <
typename vector_t>
364typename vector_t::value_type
365VecPNorm(
const vector_t& v,
unsigned int p);
367template <
typename vector_t>
369typename vector_t::value_type
372template <
typename vector_t>
374typename vector_t::value_type
385template <
typename vector_t>
388VecElemProd(vector_t& vOut,
const vector_t& v1,
const vector_t& v2);
391template <
typename vector_t>
397template <
typename vector_t>
403template <
typename vector_t>
406VecAbsIsLess(
const vector_t& v1,
const typename vector_t::value_type s);
409template <
typename vector_t>
412VecIsInBB(
const vector_t& v,
const vector_t& low,
const vector_t& high);
vector_t::value_type VecLength(const vector_t &v)
returns the length of v. Slower than VecLengthSq.
Definition math_vector_functions_common_impl.hpp:341
void VecScaleAppend(vector_t &vOut, typename vector_t::value_type s1, const vector_t &v1)
Scales a Vector and adds it to a second vector.
Definition math_vector_functions_common_impl.hpp:126
void VecCopy(vector_target_t &target, const vector_source_t &source, typename vector_target_t::value_type fill)
Copy contents between vectors of possibly different types.
Definition math_vector_functions_common_impl.hpp:56
vector_t::value_type VecMaxNorm(const vector_t &v)
Definition math_vector_functions_common_impl.hpp:625
void GenVecCross(MathVector< dim > &result, const MathVector< dim > &v_1, const MathVector< dim > &v_2)
calculates the usual cross product in 3d, and the (det, 0) vector as a cross product in 2d
Definition math_vector_functions_common_impl.hpp:465
void VecSet(vector_t &vInOut, typename vector_t::value_type s)
Set each vector component to scalar (componentwise)
Definition math_vector_functions_common_impl.hpp:539
void VecScaleAdd(vector_t &vOut, typename vector_t::value_type s1, const vector_t &v1, typename vector_t::value_type s2, const vector_t &v2)
Scales two Vectors, adds them and returns the sum in a third vector.
Definition math_vector_functions_common_impl.hpp:265
vector_t::value_type VecTwoNormSq(const vector_t &v)
Definition math_vector_functions_common_impl.hpp:585
vector_t::value_type VecOneNorm(const vector_t &v)
Definition math_vector_functions_common_impl.hpp:593
void VecNormalize(vector_t &vOut, const vector_t &v)
scales a vector_t to unit length
Definition math_vector_functions_common_impl.hpp:501
void CalculateTriangleNormalNoNormalize(vector_t &vOut, const vector_t &v1, const vector_t &v2, const vector_t &v3)
Calculates a triangle-normal in 3d (no normalization is performed).
Definition math_vector_functions_common_impl.hpp:514
void VecSubtract(vector_t &vOut, const vector_t &v1, const vector_t &v2)
subtracts v2 from v1 and stores the result in a vOut
Definition math_vector_functions_common_impl.hpp:226
vector_t::value_type VecAngle(const vector_t &v1, const vector_t &v2)
returns the angle between two vectors in radiants
Definition math_vector_functions_common_impl.hpp:401
vector_t::value_type VecDistanceSq(const vector_t &v1, const vector_t &v2)
returns the squared distance of two vector_ts.
Definition math_vector_functions_common_impl.hpp:351
void CalculateTriangleNormal(vector_t &vOut, const vector_t &v1, const vector_t &v2, const vector_t &v3)
Calculates a triangle-normal in 3d (output has length 1).
Definition math_vector_functions_common_impl.hpp:528
void VecAppend(vector_t &vOut, const vector_t &v1)
adds a MathVector<N> to a second one
Definition math_vector_functions_common_impl.hpp:72
vector_t::value_type VecLengthSq(const vector_t &v)
returns the squared length of v. Faster than VecLength.
Definition math_vector_functions_common_impl.hpp:324
vector_t::value_type VecDistance(const vector_t &v1, const vector_t &v2)
returns the distance of two vector_ts.
Definition math_vector_functions_common_impl.hpp:375
void VecAdd(vector_t &vOut, const vector_t &v1, const vector_t &v2)
adds two MathVector<N>s and stores the result in a third one
Definition math_vector_functions_common_impl.hpp:185
void VecScale(vector_t &vOut, const vector_t &v, typename vector_t::value_type s)
scales a MathVector<N>
Definition math_vector_functions_common_impl.hpp:252
vector_t::value_type VecTwoNorm(const vector_t &v)
Definition math_vector_functions_common_impl.hpp:577
void VecCross(vector_t &vOut, const vector_t &v1, const vector_t &v2)
calculates the cross product of two Vectors of dimension 3. It makes no sense to use VecCross for vec...
Definition math_vector_functions_common_impl.hpp:437
void VecPow(vector_t &vOut, const vector_t &v1, typename vector_t::value_type s)
component-wise exponentiation of a vector
Definition math_vector_functions_common_impl.hpp:239
vector_t::value_type VecAngleNorm(const vector_t &v1, const vector_t &v2)
returns the angle between two vectors of length 1 in radiants
Definition math_vector_functions_common_impl.hpp:421
void VecInterpolateLinear(vector_t &vOut, const vector_t &v1, const vector_t &v2, typename vector_t::value_type interpAmount)
Definition math_vector_functions_common_impl.hpp:310
vector_t::value_type VecDot(const vector_t &v1, const vector_t &v2)
returns the dot-product of two vector_ts
Definition math_vector_functions_common_impl.hpp:385
vector_t::value_type VecInftyNorm(const vector_t &v)
Definition math_vector_functions_common_impl.hpp:641
vector_t::value_type VecPNorm(const vector_t &v, unsigned int p)
Definition math_vector_functions_common_impl.hpp:609
bool VecIsInBB(const vector_t &v, const vector_t &low, const vector_t &high)
checks if the given point is in the bounding box given by two other points
Definition math_vector_functions_common_impl.hpp:701
void VecElemProd(vector_t &vOut, const vector_t &v1, const vector_t &v2)
component-wise product: vOut_i = v1_i*v2_i
Definition math_vector_functions_common_impl.hpp:651
bool VecAbsIsLess(const vector_t &v1, const vector_t &v2)
component-wise comparison of two vectors (in the absolute values)
Definition math_vector_functions_common_impl.hpp:677
void VecElemSqrt(vector_t &vOut, const vector_t &v1)
component-wise square root:
Definition math_vector_functions_common_impl.hpp:664