Whole project
This commit is contained in:
parent
61ddd9fc26
commit
c0fa3999c7
78 changed files with 3671 additions and 93 deletions
|
@ -47,15 +47,6 @@ class GenoVector {
|
|||
}
|
||||
|
||||
public:
|
||||
static GenoVector<N, T> * newArray(uint32 length) {
|
||||
T * v = new T[N * length];
|
||||
GenoVector<N, T> * ret = new GenoVector<N, T>[length];
|
||||
ret[0] = GenoVector<N, T>(v);
|
||||
for (uint32 i = 1; i < length; ++i)
|
||||
ret[i] = GenoVector<N, T>(v + i * N, false);
|
||||
return ret;
|
||||
}
|
||||
|
||||
T * v;
|
||||
|
||||
GenoVector() :
|
||||
|
@ -88,6 +79,7 @@ class GenoVector {
|
|||
|
||||
GenoVector(const GenoVector<N, T> & vector) :
|
||||
v(new T[N]) {
|
||||
std::cout << "aoeu" << std::endl;
|
||||
for (uint32 i = 0; i < N; ++i)
|
||||
v[i] = vector.v[i];
|
||||
}
|
||||
|
@ -95,16 +87,19 @@ class GenoVector {
|
|||
GenoVector(GenoVector<N, T> && vector) noexcept :
|
||||
owner(vector.owner),
|
||||
v(vector.v) {
|
||||
std::cout << "aoeu" << std::endl;
|
||||
vector.owner = false;
|
||||
}
|
||||
|
||||
GenoVector<N, T> & operator=(const GenoVector<N, T> & vector) {
|
||||
std::cout << "aoeu" << std::endl;
|
||||
for (uint32 i = 0; i < N; ++i)
|
||||
v[i] = vector.v[i];
|
||||
return *this;
|
||||
}
|
||||
|
||||
GenoVector<N, T> & operator=(GenoVector<N, T> && vector) noexcept {
|
||||
std::cout << "aoeu" << std::endl;
|
||||
if (owner) {
|
||||
clean();
|
||||
owner = vector.owner;
|
||||
|
@ -201,6 +196,23 @@ class GenoVector {
|
|||
return *this;
|
||||
}
|
||||
|
||||
GenoVector<N, T> & bisect(const GenoVector<N, T> & vector) {
|
||||
return *this = getLength() * vector + *this * vector.getLength();
|
||||
}
|
||||
|
||||
GenoVector<N, T> & lerp(const GenoVector<N, T> & end, double interpAmount) {
|
||||
for (uint32 i = 0; i < N; ++i)
|
||||
v[i] = (T) (v[i] + (end.v[i] - v[i]) * interpAmount);
|
||||
return *this;
|
||||
}
|
||||
|
||||
bool isZeroVector() {
|
||||
for (uint32 i = 0; i < N; ++i)
|
||||
if (v[i] != 0)
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
GenoVector<N, T> & set(const GenoVector<N, T> & set) {
|
||||
for (uint32 i = 0; i < N; ++i)
|
||||
v[i] = set.v[i];
|
||||
|
@ -397,6 +409,31 @@ GenoVector<N, T> & project(const GenoVector<N, T> & vector, const GenoVector<N,
|
|||
return target;
|
||||
}
|
||||
|
||||
template <uint32 N, typename T>
|
||||
GenoVector<N, T> bisect(const GenoVector<N, T> & vector1, const GenoVector<N, T> & vector2) {
|
||||
return vector1.getLength() * vector2 + vector1 * vector2.getLength();
|
||||
}
|
||||
|
||||
template <uint32 N, typename T>
|
||||
GenoVector<N, T> bisect(const GenoVector<N, T> & vector1, const GenoVector<N, T> & vector2, GenoVector<N, T> & target) {
|
||||
return target = vector1.getLength() * vector2 + vector1 * vector2.getLength();
|
||||
}
|
||||
|
||||
template <uint32 N, typename T>
|
||||
GenoVector<N, T> lerp(const GenoVector<N, T> & start, const GenoVector<N, T> & end, double interpAmount) {
|
||||
auto newV = new T[N];
|
||||
for (uint32 i = 0; i < N; ++i)
|
||||
newV[i] = (T) (start.v[i] + (end.v[i] - start.v[i]) * interpAmount);
|
||||
return newV;
|
||||
}
|
||||
|
||||
template <uint32 N, typename T>
|
||||
GenoVector<N, T> & lerp(const GenoVector<N, T> & start, const GenoVector<N, T> & end, double interpAmount, GenoVector<N, T> & target) {
|
||||
for (uint32 i = 0; i < N; ++i)
|
||||
target.v[i] = (T) (start.v[i] + (end.v[i] - start.v[i]) * interpAmount);
|
||||
return target;
|
||||
}
|
||||
|
||||
template <uint32 N, typename T>
|
||||
T angleBetween(const GenoVector<N, T> & vector1, const GenoVector<N, T> & vector2) {
|
||||
return acos(dot(vector1, vector2) / (vector1.getLength() * vector2.getLength()));
|
||||
|
|
|
@ -77,15 +77,6 @@ class GenoVector<2, T> {
|
|||
}
|
||||
|
||||
public:
|
||||
static GenoVector<2, T> * newArray(uint32 length) {
|
||||
T * v = new T[2 * length];
|
||||
GenoVector<2, T> * ret = new GenoVector<2, T>[length];
|
||||
ret[0] = GenoVector<2, T>(v);
|
||||
for (uint32 i = 1; i < length; ++i)
|
||||
ret[i] = GenoVector<2, T>(v + i * 2, false);
|
||||
return ret;
|
||||
}
|
||||
|
||||
T * v;
|
||||
|
||||
GenoVector() :
|
||||
|
@ -277,6 +268,21 @@ class GenoVector<2, T> {
|
|||
return *this;
|
||||
}
|
||||
|
||||
GenoVector<2, T> & bisect(const GenoVector<2, T> & vector) {
|
||||
return *this = getLength() * vector + *this * vector.getLength();
|
||||
}
|
||||
|
||||
GenoVector<2, T> & lerp(const GenoVector<2, T> & end, double interpAmount) {
|
||||
v[0] = (T) (v[0] + (end.v[0] - v[0]) * interpAmount);
|
||||
v[1] = (T) (v[1] + (end.v[1] - v[1]) * interpAmount);
|
||||
return *this;
|
||||
}
|
||||
|
||||
bool isZeroVector() {
|
||||
return v[0] == 0 &&
|
||||
v[1] == 0;
|
||||
}
|
||||
|
||||
GenoVector<2, T> & shear(T axisAngle, T shearAngle) {
|
||||
auto sinAxis = sin(axisAngle);
|
||||
auto cosAxis = cos(axisAngle);
|
||||
|
@ -581,7 +587,7 @@ GenoVector<2, T> operator+(const GenoVector<2, T> & left, const GenoVector<2, T>
|
|||
|
||||
template <typename T>
|
||||
GenoVector<2, T> operator-(const GenoVector<2, T> & left, const GenoVector<2, T> & right) {
|
||||
return {
|
||||
return {
|
||||
left.v[0] - right.v[0],
|
||||
left.v[1] - right.v[1]
|
||||
};
|
||||
|
@ -765,6 +771,21 @@ GenoVector<2, T> & project(const GenoVector<2, T> & vector, const GenoVector<2,
|
|||
return target;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GenoVector<2, T> lerp(const GenoVector<2, T> & start, const GenoVector<2, T> & end, double interpAmount) {
|
||||
return {
|
||||
(T) (start.v[0] + (end.v[0] - start.v[0]) * interpAmount),
|
||||
(T) (start.v[1] + (end.v[1] - start.v[1]) * interpAmount)
|
||||
};
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GenoVector<2, T> & lerp(const GenoVector<2, T> & start, const GenoVector<2, T> & end, double interpAmount, GenoVector<2, T> & target) {
|
||||
target.v[0] = (T) (start.v[0] + (end.v[0] - start.v[0]) * interpAmount);
|
||||
target.v[1] = (T) (start.v[1] + (end.v[1] - start.v[1]) * interpAmount);
|
||||
return target;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GenoVector<2, T> shear(const GenoVector<2, T> & vector, T axisAngle, T shearAngle) {
|
||||
auto sinAxis = sin(axisAngle);
|
||||
|
|
|
@ -76,15 +76,6 @@ class GenoVector<3, T> {
|
|||
}
|
||||
|
||||
public:
|
||||
static GenoVector<3, T> * newArray(uint32 length) {
|
||||
T * v = new T[3 * length];
|
||||
GenoVector<3, T> * ret = new GenoVector<3, T>[length];
|
||||
ret[0] = GenoVector<3, T>(v);
|
||||
for (uint32 i = 1; i < length; ++i)
|
||||
ret[i] = GenoVector<3, T>(v + i * 3, false);
|
||||
return ret;
|
||||
}
|
||||
|
||||
T * v;
|
||||
|
||||
GenoVector() :
|
||||
|
@ -278,6 +269,23 @@ class GenoVector<3, T> {
|
|||
return *this;
|
||||
}
|
||||
|
||||
GenoVector<3, T> & bisect(const GenoVector<3, T> & vector) {
|
||||
return *this = getLength() * vector + *this * vector.getLength();
|
||||
}
|
||||
|
||||
GenoVector<3, T> & lerp(const GenoVector<3, T> & end, double interpAmount) {
|
||||
v[0] = (T) (v[0] + (end.v[0] - v[0]) * interpAmount);
|
||||
v[1] = (T) (v[1] + (end.v[1] - v[1]) * interpAmount);
|
||||
v[2] = (T) (v[2] + (end.v[2] - v[2]) * interpAmount);
|
||||
return *this;
|
||||
}
|
||||
|
||||
bool isZeroVector() {
|
||||
return v[0] == 0 &&
|
||||
v[1] == 0 &&
|
||||
v[2] == 0;
|
||||
}
|
||||
|
||||
GenoVector<3, T> & cross(const GenoVector<3, T> & cross) {
|
||||
T v0 = v[1] * cross.v[2] - v[2] * cross.v[1];
|
||||
T v1 = v[2] * cross.v[0] - v[0] * cross.v[2];
|
||||
|
@ -1580,6 +1588,23 @@ GenoVector<3, T> & project(const GenoVector<3, T> & vector, const GenoVector<3,
|
|||
return target;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GenoVector<3, T> lerp(const GenoVector<3, T> & start, const GenoVector<3, T> & end, double interpAmount) {
|
||||
return {
|
||||
(T) (start.v[0] + (end.v[0] - start.v[0]) * interpAmount),
|
||||
(T) (start.v[1] + (end.v[1] - start.v[1]) * interpAmount),
|
||||
(T) (start.v[2] + (end.v[2] - start.v[2]) * interpAmount)
|
||||
};
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GenoVector<3, T> & lerp(const GenoVector<3, T> & start, const GenoVector<3, T> & end, double interpAmount, GenoVector<3, T> & target) {
|
||||
target.v[0] = (T) (start.v[0] + (end.v[0] - start.v[0]) * interpAmount);
|
||||
target.v[1] = (T) (start.v[1] + (end.v[1] - start.v[1]) * interpAmount);
|
||||
target.v[2] = (T) (start.v[2] + (end.v[2] - start.v[2]) * interpAmount);
|
||||
return target;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GenoVector<3, T> cross(const GenoVector<3, T> & vector, const GenoVector<3, T> & cross) {
|
||||
return {
|
||||
|
|
|
@ -76,15 +76,6 @@ class GenoVector<4, T> {
|
|||
}
|
||||
|
||||
public:
|
||||
static GenoVector<4, T> * newArray(uint32 length) {
|
||||
T * v = new T[4 * length];
|
||||
GenoVector<4, T> * ret = new GenoVector<4, T>[length];
|
||||
ret[0] = GenoVector<4, T>(v);
|
||||
for (uint32 i = 1; i < length; ++i)
|
||||
ret[i] = GenoVector<4, T>(v + i * 4, false);
|
||||
return ret;
|
||||
}
|
||||
|
||||
T * v;
|
||||
|
||||
GenoVector() :
|
||||
|
@ -300,6 +291,25 @@ class GenoVector<4, T> {
|
|||
return *this;
|
||||
}
|
||||
|
||||
GenoVector<4, T> & bisect(const GenoVector<4, T> & vector) {
|
||||
return *this = getLength() * vector + *this * vector.getLength();
|
||||
}
|
||||
|
||||
GenoVector<4, T> & lerp(const GenoVector<4, T> & end, double interpAmount) {
|
||||
v[0] = (T) (v[0] + (end.v[0] - v[0]) * interpAmount);
|
||||
v[1] = (T) (v[1] + (end.v[1] - v[1]) * interpAmount);
|
||||
v[2] = (T) (v[2] + (end.v[2] - v[2]) * interpAmount);
|
||||
v[3] = (T) (v[3] + (end.v[3] - v[3]) * interpAmount);
|
||||
return *this;
|
||||
}
|
||||
|
||||
bool isZeroVector() {
|
||||
return v[0] == 0 &&
|
||||
v[1] == 0 &&
|
||||
v[2] == 0 &&
|
||||
v[3] == 0;
|
||||
}
|
||||
|
||||
GenoVector<4, T> & set(const GenoVector<4, T> & set) {
|
||||
v[0] = set.v[0];
|
||||
v[1] = set.v[1];
|
||||
|
@ -3352,6 +3362,25 @@ GenoVector<4, T> & project(const GenoVector<4, T> & vector, const GenoVector<4,
|
|||
return target;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GenoVector<4, T> lerp(const GenoVector<4, T> & start, const GenoVector<4, T> & end, double interpAmount) {
|
||||
return {
|
||||
(T) (start.v[0] + (end.v[0] - start.v[0]) * interpAmount),
|
||||
(T) (start.v[1] + (end.v[1] - start.v[1]) * interpAmount),
|
||||
(T) (start.v[2] + (end.v[2] - start.v[2]) * interpAmount),
|
||||
(T) (start.v[3] + (end.v[3] - start.v[3]) * interpAmount)
|
||||
};
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GenoVector<4, T> & lerp(const GenoVector<4, T> & start, const GenoVector<4, T> & end, double interpAmount, GenoVector<4, T> & target) {
|
||||
target.v[0] = (T) (start.v[0] + (end.v[0] - start.v[0]) * interpAmount);
|
||||
target.v[1] = (T) (start.v[1] + (end.v[1] - start.v[1]) * interpAmount);
|
||||
target.v[2] = (T) (start.v[2] + (end.v[2] - start.v[2]) * interpAmount);
|
||||
target.v[3] = (T) (start.v[3] + (end.v[3] - start.v[3]) * interpAmount);
|
||||
return target;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GenoVector<4, T> translate(const GenoVector<4, T> & vector, const GenoVector<4, T> & translate) {
|
||||
return {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue