Skip to content

Commit dc69470

Browse files
committed
Rebase from 'upstream'
1 parent b60fd80 commit dc69470

File tree

3 files changed

+9
-13
lines changed

3 files changed

+9
-13
lines changed

CHANGELOG.rst

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,11 @@
22
Changelog for package geometric_shapes
33
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
44

5+
0.7.7 (2024-07-18)
6+
------------------
7+
* Use Eigen to robustly compute the angle between vertex normals (`#246 <https://github.com/ros-planning/geometric_shapes/issues/246>`_)
8+
* Contributors: Mike Lanighan
9+
510
0.7.6 (2024-05-07)
611
------------------
712
* Improve padding of meshes using weighted vertex normals (`#238 <https://github.com/ros-planning/geometric_shapes/issues/238>`_)

package.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<package format="3">
22
<name>geometric_shapes</name>
3-
<version>0.7.6</version>
3+
<version>0.7.7</version>
44
<description>Generic definitions of geometric shapes and bodies.</description>
55

66
<author email="[email protected]">Ioan Sucan</author>

src/shapes.cpp

Lines changed: 3 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -404,7 +404,6 @@ void Mesh::scaleAndPadd(double scaleX, double scaleY, double scaleZ, double padd
404404
double scaledX = sx + dx * scaleX;
405405
double scaledY = sy + dy * scaleY;
406406
double scaledZ = sz + dz * scaleZ;
407-
408407
// Padding in each direction
409408
vertices[i3] = scaledX + vertex_normals[i3] * paddX;
410409
vertices[i3 + 1] = scaledY + vertex_normals[i3 + 1] * paddY;
@@ -539,19 +538,11 @@ void Mesh::computeVertexNormals()
539538
Eigen::Map<Eigen::Vector3d> p2{ vertices + 3 * v2, 3 };
540539
Eigen::Map<Eigen::Vector3d> p3{ vertices + 3 * v3, 3 };
541540

542-
// Use re-arranged dot product equation to calculate angle between two vectors
541+
// Use eigen to calculate angle between the two vectors
543542
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();
552545
};
553-
554-
// Use law of cosines to compute angles
555546
auto ang1 = angleBetweenVectors(p2 - p1, p3 - p1);
556547
auto ang2 = angleBetweenVectors(p1 - p2, p3 - p2);
557548
auto ang3 = angleBetweenVectors(p1 - p3, p2 - p3);

0 commit comments

Comments
 (0)