Added matrix and scalar multiplications and height modification.
This commit is contained in:
parent
71ffe9df12
commit
db17de29f4
3 changed files with 31 additions and 5 deletions
|
@ -109,6 +109,12 @@ namespace CompFab
|
||||||
|
|
||||||
Vec3i operator+(const Vec3i & v1, const Vec3i & v2);
|
Vec3i operator+(const Vec3i & v1, const Vec3i & v2);
|
||||||
|
|
||||||
|
//Matrix multiplication
|
||||||
|
Vec3 mmult(const Vec3 & v1, const Vec3 & v2);
|
||||||
|
|
||||||
|
//Scalar multiplication
|
||||||
|
Vec3 smult(double s, const Vec3 & v);
|
||||||
|
|
||||||
//Cross Product
|
//Cross Product
|
||||||
Vec3 operator%(const Vec3 &v1, const Vec3 &v2);
|
Vec3 operator%(const Vec3 &v1, const Vec3 &v2);
|
||||||
|
|
||||||
|
|
|
@ -117,9 +117,20 @@ CompFab::Vec3i CompFab::operator+(const Vec3i &v1, const Vec3i &v2)
|
||||||
return v3i;
|
return v3i;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//Matrix multiplication
|
||||||
|
CompFab::Vec3 CompFab::mmult(const Vec3& v1, const Vec3& v2)
|
||||||
|
{
|
||||||
|
return Vec3(v1.m_x*v2.m_x, v1.m_y*v2.m_y, v1.m_z*v2.m_z);
|
||||||
|
}
|
||||||
|
|
||||||
|
//Scalar multiplication
|
||||||
|
CompFab::Vec3 CompFab::smult(double s, const Vec3 & v)
|
||||||
|
{
|
||||||
|
return mmult(CompFab::Vec3(s,s,s), v);
|
||||||
|
}
|
||||||
|
|
||||||
//Cross Product
|
//Cross Product
|
||||||
Vec3 CompFab::operator%(const Vec3 &v1, const Vec3 &v2)
|
CompFab::Vec3 CompFab::operator%(const Vec3 &v1, const Vec3 &v2)
|
||||||
{
|
{
|
||||||
Vec3 v3;
|
Vec3 v3;
|
||||||
v3[0] = v1[1]*v2[2] - v1[2]*v2[1];
|
v3[0] = v1[1]*v2[2] - v1[2]*v2[1];
|
||||||
|
|
|
@ -55,7 +55,14 @@ std::vector<CompFab::Vec3> createVec3d(std::vector<CompFab::Vec3> &t, int layers
|
||||||
|
|
||||||
// Vec3 to hold our current translation matrix.
|
// Vec3 to hold our current translation matrix.
|
||||||
CompFab::Vec3 *trans = new CompFab::Vec3(0, spacing, 0);
|
CompFab::Vec3 *trans = new CompFab::Vec3(0, spacing, 0);
|
||||||
*output = t;
|
|
||||||
|
//Vec3 to hold our current height multiplier.
|
||||||
|
CompFab::Vec3 *mult = new CompFab::Vec3(1,1,1);
|
||||||
|
|
||||||
|
for(int i = 0; i < t.size(); i++)
|
||||||
|
{
|
||||||
|
output->push_back(mmult(*mult, t[i]));
|
||||||
|
}
|
||||||
|
|
||||||
// cl for current layer.
|
// cl for current layer.
|
||||||
for(int cl = 1; cl < layers; cl++)
|
for(int cl = 1; cl < layers; cl++)
|
||||||
|
@ -63,6 +70,8 @@ std::vector<CompFab::Vec3> createVec3d(std::vector<CompFab::Vec3> &t, int layers
|
||||||
// Constructor used to bypass needing to create a new operator override for multiplication.
|
// Constructor used to bypass needing to create a new operator override for multiplication.
|
||||||
// Should also consider doing so anyway to speed up process, use less memory, and add modularization.
|
// Should also consider doing so anyway to speed up process, use less memory, and add modularization.
|
||||||
*temp = CompFab::Vec3(-ls*cl, -ws*cl, 0);
|
*temp = CompFab::Vec3(-ls*cl, -ws*cl, 0);
|
||||||
|
mult->m_z = 1.0 - (cl*1.0)/layers;
|
||||||
|
|
||||||
|
|
||||||
for(int c = 0; c < cl*8; c++)
|
for(int c = 0; c < cl*8; c++)
|
||||||
{
|
{
|
||||||
|
@ -71,7 +80,7 @@ std::vector<CompFab::Vec3> createVec3d(std::vector<CompFab::Vec3> &t, int layers
|
||||||
*temp += *trans;
|
*temp += *trans;
|
||||||
for(int j = 0; j < t.size(); j++)
|
for(int j = 0; j < t.size(); j++)
|
||||||
{
|
{
|
||||||
output->push_back(t[j] + *temp);
|
output->push_back(mmult(*mult, t[j]) + *temp);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -106,8 +115,8 @@ int main(int argc, char **argv)
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: Modularize these.
|
// TODO: Modularize these.
|
||||||
int layers = 5;
|
int layers = 10;
|
||||||
double spacing = 1;
|
double spacing = 0.5;
|
||||||
|
|
||||||
// Create Mesh object from file, output to manipulate from template Mesh.
|
// Create Mesh object from file, output to manipulate from template Mesh.
|
||||||
Mesh *test = new Mesh(argv[1], false);
|
Mesh *test = new Mesh(argv[1], false);
|
||||||
|
|
Reference in a new issue