41 #include "CUMathBase.h"
85 #pragma mark Constructors
90 Vec3() : x(0), y(0), z(0) {}
99 Vec3(
float x,
float y,
float z) { this->x =
x; this->y =
y; this->z =
z; }
106 Vec3(
const float* array) { x = array[0]; y = array[1]; z = array[2]; }
115 x = p2.
x-p1.
x; y = p2.
y-p1.
y; z = p2.
z-p1.
z;
142 this->x =
x; this->y =
y; this->z =
z;
154 x = array[0]; y = array[1]; z = array[2];
166 x = v.
x; y = v.
y; z = v.
z;
179 x = p2.
x-p1.
x; y = p2.
y-p1.
y; z = p2.
z-p1.
z;
195 #pragma mark Static Arithmetic
323 #pragma mark Arithmetic
333 x = clampf(x, min.
x, max.
x);
334 y = clampf(y, min.
y, max.
y);
335 z = clampf(z, min.
z, max.
z);
350 return Vec3(clampf(x,min.
x,max.
x), clampf(y, min.
y, max.
y),clampf(z, min.
z, max.
z));
361 x += v.
x; y += v.
y; z += v.
z;
375 this->x +=
x; this->y +=
y; this->z +=
z;
387 x -= v.
x; y -= v.
y; z -= v.
z;
401 this->x -=
x; this->y -=
y; this->z -=
z;
413 x *= s; y *= s; z *= s;
427 x *= sx; y *= sy; z *= sz;
439 x *= v.
x; y *= v.
y; z *= v.
z;
480 x = -
x; y = -
y; z = -
z;
494 x = 1.0f/
x; y = 1.0f/
y; z = 1.0f/
z;
537 x = func(x); y = func(y); z = func(z);
552 return Vec3(func(x), func(y), func(z));
557 #pragma mark Operators
637 return result.
add(v);
677 return result.
scale(s);
692 return result.
scale(v);
726 #pragma mark Comparisons
739 return (x == v.
x ? (y == v.
y ? z < v.
z : y < v.
y) : x < v.
x);
754 return (x == v.
x ? (y == v.
y ? z <= v.
z : y <= v.
y) : x <= v.
x);
769 return (x == v.
x ? (y == v.
y ? z > v.
z : y > v.
y) : x > v.
x);
784 return (x == v.
x ? (y == v.
y ? z >= v.
z : y >= v.
y) : x >= v.
x);
798 return x == v.
x && y == v.
y && z == v.
z;
812 return x != v.
x || y != v.
y || z != v.
z;
826 return x <= v.
x && y <= v.
y && z <= v.
z;
840 return x >= v.
x && y >= v.
y && z >= v.
z;
854 bool equals(
const Vec3& v,
float variance=CU_MATH_EPSILON)
const {
860 #pragma mark Linear Attributes
867 return x == 0.0f && y == 0.0f && z == 0.0f;
887 return x == 1.0f && y == 1.0f && z == 1.0f;
896 return x != 0.0f && y != 0.0f && z != 0.0f;
906 bool isUnit(
float variance=CU_MATH_EPSILON)
const {
908 return dot < variance && dot > -variance;
953 return (x-v.
x)*(x-v.
x)+(y-v.
y)*(y-v.
y)+(z-v.
z)*(z-v.
z);
985 #pragma mark Linear Algebra
993 float dot(
const Vec3& v)
const {
return (x * v.
x + y * v.
y + z * v.
z); }
1003 return *(
cross(*
this,v,
this));
1017 return result.
cross(other);
1058 return Vec3((x + other.
x) / 2.0f, (y + other.
y) / 2.0f, (z + other.
z) / 2.0f);
1083 return other * (
dot(other)/other.
dot(other));
1099 *
this *= (1.f - alpha);
1100 return *
this += other * alpha;
1116 return *
this * (1.f - alpha) + other * alpha;
1137 #pragma mark Static Linear Algebra
1212 #pragma mark Conversion Methods
1224 std::string
toString(
bool verbose =
false)
const;
1280 operator Vec2()
const;
1308 operator Vec4()
const;
1335 #pragma mark Friend Operations
1345 inline const Vec3 operator*(
float x,
const Vec3& v) {
1347 return result.scale(x);
1351 typedef Vec3 Point3;
Vec3 & scale(float s)
Definition: CUVec3.h:412
float dot(const Vec3 &v) const
Definition: CUVec3.h:993
Vec3 getClamp(const Vec3 &min, const Vec3 &max) const
Definition: CUVec3.h:349
Vec3 & setZero()
Definition: CUVec3.h:188
Vec3 getLerp(const Vec3 &other, float alpha)
Definition: CUVec3.h:1115
Vec3 getNormalization() const
Definition: CUVec3.h:1043
bool isNearZero(float variance=CU_MATH_EPSILON) const
Definition: CUVec3.h:877
Vec3 & cross(const Vec3 &v)
Definition: CUVec3.h:1002
float x
Definition: CUVec3.h:66
Vec3(float x, float y, float z)
Definition: CUVec3.h:99
const Vec3 operator-() const
Definition: CUVec3.h:661
Vec3 & operator*=(const Vec3 &v)
Definition: CUVec3.h:598
Vec3 & operator/=(float s)
Definition: CUVec3.h:609
Vec3 & lerp(const Vec3 &other, float alpha)
Definition: CUVec3.h:1098
Vec3()
Definition: CUVec3.h:90
bool operator<(const Vec3 &v) const
Definition: CUVec3.h:738
static const Vec3 UNIT_Z
Definition: CUVec3.h:81
Vec3 & operator/=(const Vec3 &v)
Definition: CUVec3.h:622
bool isOne() const
Definition: CUVec3.h:886
float z
Definition: CUVec3.h:70
Vec3 & set(float x, float y, float z)
Definition: CUVec3.h:141
const Vec3 operator*(float s) const
Definition: CUVec3.h:675
Vec3 & add(float x, float y, float z)
Definition: CUVec3.h:374
const Vec3 operator-(const Vec3 &v) const
Definition: CUVec3.h:649
bool under(const Vec3 &v) const
Definition: CUVec3.h:825
float distanceSquared(const Vec3 &v) const
Definition: CUVec3.h:952
Vec3 getCross(const Vec3 &other) const
Definition: CUVec3.h:1015
float length() const
Definition: CUVec3.h:963
Vec3 & set(const Vec3 &p1, const Vec3 &p2)
Definition: CUVec3.h:178
Vec3 & reciprocate()
Definition: CUVec3.h:493
static Vec3 * subtract(const Vec3 &v1, const Vec3 &v2, Vec3 *dst)
Vec3 & map(std::function< float(float)> func)
Definition: CUVec3.h:536
bool operator<=(const Vec3 &v) const
Definition: CUVec3.h:753
Definition: CUColor4.h:73
Vec3 getProjection(const Vec3 &other) const
Definition: CUVec3.h:1082
const Vec3 operator*(const Vec3 &v) const
Definition: CUVec3.h:690
float getAngle(const Vec3 &other, const Vec3 &up=Vec3::UNIT_Z) const
const Vec3 operator/(const Vec3 &v) const
Definition: CUVec3.h:719
bool isInvertible() const
Definition: CUVec3.h:895
static float angle(const Vec3 &v1, const Vec3 &v2, const Vec3 &up=Vec3::UNIT_Z)
const Vec3 operator/(float s) const
Definition: CUVec3.h:704
bool isUnit(float variance=CU_MATH_EPSILON) const
Definition: CUVec3.h:906
static const Vec3 UNIT_Y
Definition: CUVec3.h:79
Vec3 & operator+=(const Vec3 &v)
Definition: CUVec3.h:565
bool over(const Vec3 &v) const
Definition: CUVec3.h:839
static Vec3 * negate(const Vec3 &v, Vec3 *dst)
static const Vec3 ONE
Definition: CUVec3.h:75
Vec3 & set(const Vec3 &v)
Definition: CUVec3.h:165
bool operator!=(const Vec3 &v) const
Definition: CUVec3.h:811
Vec3 & smooth(const Vec3 &target, float elapsed, float response)
Vec3 & set(const float *array)
Definition: CUVec3.h:153
float distance(const Vec3 &v) const
Definition: CUVec3.h:934
Vec3 & subtract(const Vec3 &v)
Definition: CUVec3.h:386
Vec3 & add(const Vec3 &v)
Definition: CUVec3.h:360
Vec3 & scale(float sx, float sy, float sz)
Definition: CUVec3.h:426
Vec3 & clamp(const Vec3 &min, const Vec3 &max)
Definition: CUVec3.h:332
bool operator>(const Vec3 &v) const
Definition: CUVec3.h:768
Vec3 getNegation() const
Definition: CUVec3.h:505
static Vec3 * add(const Vec3 &v1, const Vec3 &v2, Vec3 *dst)
static Vec3 * midpoint(const Vec3 &v1, const Vec3 &v2, Vec3 *dst)
Vec3 & operator*=(float s)
Definition: CUVec3.h:587
static Vec3 * scale(const Vec3 &v, float s, Vec3 *dst)
const Vec3 operator+(const Vec3 &v) const
Definition: CUVec3.h:635
Vec3 & subtract(float x, float y, float z)
Definition: CUVec3.h:400
bool operator==(const Vec3 &v) const
Definition: CUVec3.h:797
static Vec3 * reciprocate(const Vec3 &v, Vec3 *dst)
Vec3 getMidpoint(const Vec3 &other) const
Definition: CUVec3.h:1057
Vec3 & operator=(const float *array)
Definition: CUVec3.h:128
Vec3(const float *array)
Definition: CUVec3.h:106
static Vec3 * divide(const Vec3 &v, float s, Vec3 *dst)
Vec3 & operator-=(const Vec3 &v)
Definition: CUVec3.h:576
Vec3 & project(const Vec3 &other)
Definition: CUVec3.h:1068
std::string toString(bool verbose=false) const
Definition: CUColor4.h:1084
float y
Definition: CUVec3.h:68
Definition: CUAction.h:51
float lengthSquared() const
Definition: CUVec3.h:979
bool isZero() const
Definition: CUVec3.h:866
static const Vec3 ZERO
Definition: CUVec3.h:73
static const Vec3 UNIT_X
Definition: CUVec3.h:77
static Vec3 * clamp(const Vec3 &v, const Vec3 &min, const Vec3 &max, Vec3 *dst)
bool operator>=(const Vec3 &v) const
Definition: CUVec3.h:783
Vec3 getReciprocal() const
Definition: CUVec3.h:521
Vec3 getMap(std::function< float(float)> func) const
Definition: CUVec3.h:551
Vec3 & negate()
Definition: CUVec3.h:479
Vec3 & scale(const Vec3 &v)
Definition: CUVec3.h:438
Vec3(const Vec3 &p1, const Vec3 &p2)
Definition: CUVec3.h:114
bool equals(const Vec3 &v, float variance=CU_MATH_EPSILON) const
Definition: CUVec3.h:854