1

如何确定不完整(即非防水)修剪的凸度?即使对于不完整的网格,凸性也是明确定义的:如果不完整的修剪 T 可以完成为凸修剪,则 T 是凸的。(我使用术语“不完整”而不是“非防水”,因为 a. 在我的情况下,它是现有修剪的子集和 b. 因为“非防水”包括小错误/浮点不准确的情况,而我'我谈论丢失的三角形补丁,所以我认为“不完整”更令人回味。)

我试图简单地使用Trimesh.is_convex,但总是返回False不完整的三角形。我考虑过确定点集的凸包并检查它是否具有与不完整修剪相同的点数,但这太松懈了。(作为二维示例,想想字母 Z:它是一个不完整的多边形,根据上述定义它是非凸的。但凸包的点与原始点相同。)

我正在考虑计算不完整修剪中的所有三角形及其凸包中的所有三角形的哈希值,然后检查是否包含的方法。但是有没有一种概念上更简单/更有效的方法?

4

1 回答 1

0

一种解决方案 - 不是特别快,不是特别优雅 - 是确定不完整网格 T 的凸包,然后计算 T 的所有顶点和 T 的所有面质心到凸包的距离。如果所有距离(在浮点精度范围内)为 0,则 T 是凸的。

于 2021-01-08T11:07:10.620 回答