【发布时间】:2015-01-06 17:28:04
【问题描述】:
当一个多边形被旋转时,它会跳过当前和所需情况之间的所有可能的旋转。这里有 3 张图片说明了我的意思:
这是当前多边形:
将其旋转 45 度(顺时针方向)将导致:
当前多边形顺时针旋转了 45 度,中间所有可能的情况都会导致:
实际上如何调用这些“袖子”(中间情况),以及如何根据当前多边形和所需的旋转角度计算/近似这些“完整多边形”?
【问题讨论】:
当一个多边形被旋转时,它会跳过当前和所需情况之间的所有可能的旋转。这里有 3 张图片说明了我的意思:
这是当前多边形:
将其旋转 45 度(顺时针方向)将导致:
当前多边形顺时针旋转了 45 度,中间所有可能的情况都会导致:
实际上如何调用这些“袖子”(中间情况),以及如何根据当前多边形和所需的旋转角度计算/近似这些“完整多边形”?
【问题讨论】:
在 CAD 行业中,我们将此操作称为 2d 扫描或 2d 平面扫描;在这种情况下,二维平面旋转扫描。 (不要与 sweep line algorithm 混淆。)生成的区域将是 2d 扫描区域或 2d 扫描面,而轮廓称为 2d 扫描边界。
可以在此处找到有关该主题的几篇论文:
Polygonal boundary approximation for a 2D general sweep based on envelope and boolean operations (2000)(another link,和一个direct PDF Link。)
Approximate General Sweep Boundary of a 2D Curved Object (1993).
您的 2d 旋转扫描案例并不像这些论文中考虑的案例那样普遍。如果您考虑只扫描一条曲线——比如一条线或一条弧线——那么二维扫描区域的边界曲线将如下所示。想象在 3d 中扫描曲线,其中曲线在绕轴旋转时同时沿旋转轴拉伸。在这种情况下,您的 2d 扫描的边界将是投影回 2d 的 3d 扫掠表面的边界加上投影回 2d 的扫掠表面的3d silhouettes,将旋转轴设为用于创建剪影的视图向量。
计算一般曲面的轮廓很重要,但是对于沿旋转轴的旋转扫描+挤压,轮廓将由扫描曲线的切线平行于旋转方向的点追踪 - 即垂直到从旋转中心绘制的半径矢量。因此,计算二维面积的算法可能如下所示:
对于要旋转扫掠的区域的每个边缘段,
在切线与旋转方向平行的地方分割边。
排除任何退化曲线——与旋转轴同轴的弧线。
对于每个分割边段,形成一个由曲线的起始位置、曲线的结束位置以及由弧连接的起点和终点组成的二维区域。由于我们在轮廓点处分割,所以不应该有自相交。
对二维区域的起始位置、结束位置和第一步创建的扫掠区域进行2d boolean。
【讨论】: