18 #ifndef PIC_UTIL_VEC_HPP 19 #define PIC_UTIL_VEC_HPP 24 #include "../base.hpp" 25 #include "../util/math.hpp" 27 #include "../util/string.hpp" 34 template<u
int N,
class T>
45 for(
uint i = 0; i < N; i++) {
82 for (
auto i = 0; i < N; i++) {
83 this->data[i] =
data[i];
92 for(
auto i = 0; i < N; i++) {
102 for(
auto i = 0; i < N; i++) {
119 for (
auto i = 0; i < N; i++) {
120 ret.
data[i] = maxVal - this->data[i];
136 memcpy(ret, this->data,
sizeof(T) * N);
149 for (
auto i = 0; i < N; i++) {
150 ret = ret && (this->data[i] > zero);
164 for (
auto i = 0; i < N; i++) {
165 ret = ret || (this->data[i] < zero);
174 memcpy(ret.
data,
data, N *
sizeof(T));
205 for(
auto i = 0; i < N; i++) {
206 if(a[i] !=
data[i]) {
221 for (
auto i = 0; i < N; i++) {
222 ret += this->data[i];
235 for (
auto i = 0; i < N; i++) {
236 ret += this->data[i];
248 T ret = this->data[0];
249 for (
auto i = 1; i < N; i++) {
250 ret = this->data[i] > ret ? this->data[i] : ret;
263 for (
auto i = 1; i < N; i++) {
264 if (valMax == this->data[i]) {
279 for(
auto i=0; i<N; i++) {
280 out +=
data[i] * a[i];
291 T ret = this->data[0] * this->data[0];
293 for(
auto i = 1; i < N; i++) {
294 ret += this->data[i] * this->data[i];
307 T tmp =
data[0] - x[0];
310 for(
auto i = 1; i < N; i++) {
311 tmp =
data[i] - x[i];
326 for (
auto i = 0; i < N; i++) {
339 for(
auto i = 1; i < N; i++) {
353 std::string ret =
"[";
354 for (
auto i = 0; i < N; i++) {
371 printf(
"%s\n", vec_str.c_str());
386 for (
auto i = 0; i < N; i++) {
397 for (
auto i = 0; i < N; i++) {
398 this->data[i] = a[i];
408 for (
auto i = 0; i < N; i++) {
409 this->data[i] = a.
data[i];
419 for (
auto i = 0; i < N; i++) {
430 for (
auto i = 0; i < N; i++) {
431 this->data[i] = a[i];
453 for (
auto i = 0; i < N; i++) {
466 memcpy(ret.
data, this->data,
sizeof(T) * N);
473 for (
auto i = 0; i < N; i++) {
493 for (
auto i = 0; i < N; i++) {
494 this->data[i] *= a[i];
506 memcpy(ret.
data, this->data,
sizeof(T) * N);
517 for (
auto i = 0; i < N; i++) {
530 memcpy(ret.
data, this->data,
sizeof(T) * N);
547 for (
auto i = 0; i < N; i++) {
548 this->data[i] += col.
data[i];
560 memcpy(ret.
data, this->data,
sizeof(T) * N);
571 for (
auto i = 0; i < N; i++) {
572 this->data[i] -= col.
data[i];
583 for (
auto i = 0; i < N; i++) {
584 ret.
data[i] = -this->data[i];
598 memcpy(ret.
data, this->data,
sizeof(T) * N);
605 for (
auto i = 0; i < N; i++) {
606 this->data[i] *= a.
data[i];
627 memcpy(ret.
data, this->data,
sizeof(T) * N);
638 for (
auto i = 0; i < N; i++) {
639 this->data[i] /= a.
data[i];
651 memcpy(ret.
data, this->data,
sizeof(T) * N);
664 for (
auto i = 0; i < N; i++) {
665 ret = ret || (this->data[i] != a.
data[i]);
678 for (
auto i = 0; i < N; i++) {
679 ret = ret && (this->data[i] == a.
data[i]);
694 for(
auto i = 0; i < N; i++) {
695 if((sample[i] < -1.0f) || (sample[i] > 1.0f)) {
709 length = sqrtf(length);
710 for(
auto i = 0; i < N; i++) {
728 for(
auto i = 0; i < N; i++) {
738 printf(
"\n Values :");
739 for(
auto i = 0; i < N; i++) {
740 printf(
"%d ", ret.
data[i]);
758 for(
auto i = 0; i < N; i++) {
764 if((t < 1.0f) || (t > 4.0f)) {
769 for(
auto i = 0; i < N; i++) {
770 x[i] = x[i] * radius + center[i];
779 for (
auto i = 0; i < N; i++) {
787 for (
auto i = 0; i < N; i++) {
796 for (
auto i = 0; i < N; i++) {
803 template<u
int N,
class T>
806 for(
auto i = 0; i < in.size(); i++) {
807 for(
auto j = 0; j < N; j++) {
808 out.push_back(in[i][j]);
813 template<u
int N,
class T>
816 for(
auto i = 0; i < in.size(); i+= N) {
818 for(
auto j = 0; j < N; j++) {
T getMax()
getMax
Definition: vec.hpp:246
void vecGamma(Vec< N, float > &ret, float g)
Definition: vec.hpp:777
void vecrint(Vec< N, float > &ret)
Definition: vec.hpp:736
unsigned int uint
Definition: base.hpp:23
T squaredSum()
squaredSum
Definition: vec.hpp:289
bool operator!=(Vec< N, T > &a)
operator !=
Definition: vec.hpp:661
PIC_INLINE Vec< N, float > randomPoint(std::mt19937 *m)
randomPoint
Definition: vec.hpp:724
T * convertToArray(T *ret)
convertToArray
Definition: vec.hpp:130
std::string fromNumberToString(T num)
fromNumberToString converts a number into a string.
Definition: string.hpp:102
void mul(const Vec< N, T > &a)
Definition: vec.hpp:603
Vec< 3, int > Vec3i
Vec3i.
Definition: vec.hpp:834
void operator=(const T &a)
operator =
Definition: vec.hpp:384
void setZero()
setZero
Definition: vec.hpp:90
bool isGreaterThanZero()
isGreaterThanZero
Definition: vec.hpp:145
Vec< 2, float > Vec2f
Vec2f.
Definition: vec.hpp:844
int getMaxChannel()
getMaxChannel
Definition: vec.hpp:259
bool hasNegative()
hasNegative
Definition: vec.hpp:160
Vec< 4, int > Vec4i
Vec4i.
Definition: vec.hpp:839
Vec< N, T > operator-() const
operator -
Definition: vec.hpp:580
const T & operator[](std::size_t i) const
operator []
Definition: vec.hpp:183
T getMean()
Mean.
Definition: vec.hpp:218
PIC_INLINE Vec< N, float > normalize(Vec< N, float > x)
Definition: vec.hpp:704
Vec< 2, int > Vec2i
Vec2i.
Definition: vec.hpp:829
Vec< N, T > operator+(const T &a) const
operator +
Definition: vec.hpp:440
void transferFromPlainToVec(std::vector< T > &in, std::vector< Vec< N, T > > &out)
Definition: vec.hpp:814
Vec< N, T > operator*(const T &a) const
operator *
Definition: vec.hpp:503
T getSum()
getSum
Definition: vec.hpp:232
T data[N]
Definition: vec.hpp:38
void operator/=(const float &a)
operator /=
Definition: vec.hpp:515
void print()
print
Definition: vec.hpp:368
PIC_INLINE Vec< N, float > annulusSampling(std::mt19937 *m, Vec< N, float > center, float radius)
annulusSampling
Definition: vec.hpp:753
void clamp(T min, T max)
clamp
Definition: vec.hpp:324
#define PIC_INLINE
Definition: base.hpp:33
std::string toString()
toString
Definition: vec.hpp:351
Vec< N, T > clone()
Definition: vec.hpp:171
void operator-=(const T &a)
operator -=
Definition: vec.hpp:451
T dot(Vec< N, T > a)
dot
Definition: vec.hpp:276
Vec< N, T > operator/(const float &a) const
operator /
Definition: vec.hpp:527
void setOne()
setOne
Definition: vec.hpp:100
PIC_INLINE bool insideVecBBox(const Vec< N, float > &sample)
insideVecBBox
Definition: vec.hpp:692
void operator+=(const T &a)
operator +=
Definition: vec.hpp:417
T & operator[](std::size_t i)
operator []
Definition: vec.hpp:193
#define CLAMPi(x, a, b)
Definition: math.hpp:81
Definition: bilateral_separation.hpp:25
bool equal(Vec< N, T > a)
equal
Definition: vec.hpp:203
PIC_INLINE float getRandom(unsigned int n)
Random returns a number in [0, 2^32 - 1] to a float in [0, 1].
Definition: math.hpp:138
void transferFromVecToPlain(std::vector< Vec< N, T > > &in, std::vector< T > &out)
Definition: vec.hpp:804
bool operator==(Vec< N, T > &a)
operator ==
Definition: vec.hpp:675
Vec< N, float > vecValOver(Vec< N, float > &in, float value)
Definition: vec.hpp:793
void vecSqrt(Vec< N, float > &ret)
Definition: vec.hpp:785
T lengthSq()
lengthSq
Definition: vec.hpp:335
The Vec class.
Definition: vec.hpp:35
Vec< N, T > inverse(T maxVal=T(-1))
inverse
Definition: vec.hpp:111
Vec< 3, float > Vec3f
Vec3f.
Definition: vec.hpp:849
T distanceSq(Vec< N, T > &x)
distanceSq
Definition: vec.hpp:305
void mul(const T &a)
Definition: vec.hpp:471
void operator*=(const T &a)
operator *=
Definition: vec.hpp:482