@@ -404,7 +404,6 @@ void Mesh::scaleAndPadd(double scaleX, double scaleY, double scaleZ, double padd
404
404
double scaledX = sx + dx * scaleX;
405
405
double scaledY = sy + dy * scaleY;
406
406
double scaledZ = sz + dz * scaleZ;
407
-
408
407
// Padding in each direction
409
408
vertices[i3] = scaledX + vertex_normals[i3] * paddX;
410
409
vertices[i3 + 1 ] = scaledY + vertex_normals[i3 + 1 ] * paddY;
@@ -539,19 +538,11 @@ void Mesh::computeVertexNormals()
539
538
Eigen::Map<Eigen::Vector3d> p2{ vertices + 3 * v2, 3 };
540
539
Eigen::Map<Eigen::Vector3d> p3{ vertices + 3 * v3, 3 };
541
540
542
- // Use re-arranged dot product equation to calculate angle between two vectors
541
+ // Use eigen to calculate angle between the two vectors
543
542
auto angleBetweenVectors = [](const Eigen::Vector3d& vec1, const Eigen::Vector3d& vec2) -> double {
544
- double vec1_norm = vec1.norm ();
545
- double vec2_norm = vec2.norm ();
546
-
547
- // Handle the case where either vector has zero length, to prevent division-by-zero
548
- if (vec1_norm == 0.0 || vec2_norm == 0.0 )
549
- return 0.0 ;
550
-
551
- return std::acos (vec1.dot (vec2) / (vec1_norm * vec2_norm));
543
+ Eigen::AngleAxisd a (Eigen::Quaterniond::FromTwoVectors (vec1, vec2));
544
+ return a.angle ();
552
545
};
553
-
554
- // Use law of cosines to compute angles
555
546
auto ang1 = angleBetweenVectors (p2 - p1, p3 - p1);
556
547
auto ang2 = angleBetweenVectors (p1 - p2, p3 - p2);
557
548
auto ang3 = angleBetweenVectors (p1 - p3, p2 - p3);
0 commit comments