Skip to content
Snippets Groups Projects
Commit bc9dd718 authored by Patrick M. Jensen's avatar Patrick M. Jensen
Browse files

Make separate function for 4D cross product

parent 74795e65
Branches
No related tags found
No related merge requests found
...@@ -11,6 +11,8 @@ ...@@ -11,6 +11,8 @@
using namespace CGLA; using namespace CGLA;
Vec4f cross4(Vec4f t, Vec4f u, Vec4f v);
/** Incidence simplicial data structure for storing 3D simplicial complexes in 4D space. /** Incidence simplicial data structure for storing 3D simplicial complexes in 4D space.
* NOTE: This code was adapted from the SimplexMesh class. * NOTE: This code was adapted from the SimplexMesh class.
*/ */
......
...@@ -5,6 +5,20 @@ ...@@ -5,6 +5,20 @@
#include "util.h" #include "util.h"
Vec4f cross4(Vec4f t, Vec4f u, Vec4f v)
{
// See: https://math.stackexchange.com/a/2371039
float a1 = t[3] * u[2] * v[1] - t[2] * u[3] * v[1] - t[3] * u[1] * v[2] +
t[1] * u[3] * v[2] + t[2] * u[1] * v[3] - t[1] * u[2] * v[3];
float a2 = -t[3] * u[2] * v[0] + t[2] * u[3] * v[0] + t[3] * u[0] * v[2] -
t[0] * u[3] * v[2] - t[2] * u[0] * v[3] + t[0] * u[2] * v[3];
float a3 = t[3] * u[1] * v[0] - t[1] * u[3] * v[0] - t[3] * u[0] * v[1] +
t[0] * u[3] * v[1] + t[1] * u[0] * v[3] - t[0] * u[1] * v[3];
float a4 = -t[2] * u[1] * v[0] + t[1] * u[2] * v[0] + t[2] * u[0] * v[1] -
t[0] * u[2] * v[1] - t[1] * u[0] * v[2] + t[0] * u[1] * v[2];
return Vec4f(a1, a2, a3, a4);
}
TetMesh4d::TetMesh4d(const std::vector<Vec4f>& vertexPositions, TetMesh4d::TetMesh4d(const std::vector<Vec4f>& vertexPositions,
const std::vector<std::array<int, 4>>& tetIdxs) const std::vector<std::array<int, 4>>& tetIdxs)
{ {
...@@ -341,16 +355,7 @@ Vec4f TetMesh4d::tetNormal(const Tetrahedron& tet) const ...@@ -341,16 +355,7 @@ Vec4f TetMesh4d::tetNormal(const Tetrahedron& tet) const
Vec4f u = v3 - v1; Vec4f u = v3 - v1;
Vec4f v = v4 - v1; Vec4f v = v4 - v1;
// See: https://math.stackexchange.com/a/2371039 return cross4(t, u, v);
float a1 = t[3] * u[2] * v[1] - t[2] * u[3] * v[1] - t[3] * u[1] * v[2] +
t[1] * u[3] * v[2] + t[2] * u[1] * v[3] - t[1] * u[2] * v[3];
float a2 = -t[3] * u[2] * v[0] + t[2] * u[3] * v[0] + t[3] * u[0] * v[2] -
t[0] * u[3] * v[2] - t[2] * u[0] * v[3] + t[0] * u[2] * v[3];
float a3 = t[3] * u[1] * v[0] - t[1] * u[3] * v[0] - t[3] * u[0] * v[1] +
t[0] * u[3] * v[1] + t[1] * u[0] * v[3] - t[0] * u[1] * v[3];
float a4 = -t[2] * u[1] * v[0] + t[1] * u[2] * v[0] + t[2] * u[0] * v[1] -
t[0] * u[2] * v[1] - t[1] * u[0] * v[2] + t[0] * u[1] * v[2];
return Vec4f(a1, a2, a3, a4);
} }
void TetMesh4d::computeTetNormals(bool normalize) void TetMesh4d::computeTetNormals(bool normalize)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment