3D洞穴生成

问题描述 投票:0回答:1

我需要将两个不同尺寸的多边形连接成一个部分。这些多边形可以位于彼此不同的平面中。多边形也可以是凸多边形或非凸多边形。我需要像 Blender 这样的算法 - 桥边循环

我当前的想法是将缺少的顶点数量添加到较小的多边形中(但如何最好地定位它们?)。然后选择多边形的相对中心点,并相对于该点顺时针对顶点进行排序。并将两个多边形的每个顶点配对以获得连接的部分。

如果有一个现成的算法可以解决我的问题,我希望你向我展示它。

c++ 3d computational-geometry cad
1个回答
0
投票

如果两个端部轮廓中的每一个都完全包含在由另一个端部轮廓的平面定义的半空间之一内,并且轮廓是凸形的,则一种简单的方法是根据轮廓周围的角度形成侧面.

首先定义参考法线来协调顶点匹配。一个简单的选择是两个端部轮廓平面法线的平均值,方向相同。

现在,对于第一个轮廓中的每条边,找到垂直于参考法线的外向法线。找到另一个轮廓中在该方向上的极值顶点。创建一个三角形面,其中包含第一个轮廓中的该边和第二个轮廓中的该顶点。创建所有这些后,对第二个轮廓中的边执行相同的操作,将它们连接到第一个轮廓中的顶点。

这可以通过旋转卡尺算法有效地实现,按角度顺序围绕两个轮廓的周长进行迭代,并在角度触及轮廓之一边缘的切线时输出一个面。

对于非凸的轮廓,您可以使用类似的算法。找到每个轮廓的凸包,然后在凸包上运行上述算法。当您击中位于凸包中但不在生成它的轮廓中的边时,您会为 each 轮廓边输出一个三角形面,并替换为凸包边(即,轮廓边运行中的每条边)船体边缘的两个端点)。

© www.soinside.com 2019 - 2024. All rights reserved.