如何调用多边形 "sleeves" 以及如何计算它们?

How are polygon "sleeves" called and how are they calculated?

旋转多边形时,它会跳过当前和所需情况之间的所有可能旋转。这里有 3 张图片说明了我的意思:

这是当前多边形:

将其旋转 45 度(顺时针方向)将导致:

当前多边形顺时针旋转 45 度,所有可能的情况都将导致:

这些 "sleeves"(in-between 情况)实际上是如何调用的,这些 "complete polygons" calculated/approximated 如何基于当前多边形和所需的旋转角度?

在CAD行业中,我们将此操作称为2d扫描,或2d平面扫描;在这种情况下,二维平面旋转扫描。 (不要与 sweep line algorithm 混淆。)结果区域将是 2d 扫描区域或 2d 扫描面,轮廓称为 2d 扫描边界。

可以在此处找到关于该主题的几篇论文:

您的 2d 旋转扫描案例不像这些论文中考虑的案例那样普遍。如果您考虑仅扫掠一条曲线——比如一条直线或一条弧线——那么二维扫掠区域的边界曲线将如下所示。想象一下在 3d 中扫过曲线 ,其中曲线在绕轴旋转的同时沿旋转轴被挤压。在这种情况下,2d 扫描的边界将是投影回 2d 的 3d 扫描表面的边界加上投影回 2d 的扫描表面 3d silhouettes,取旋转轴作为轮廓创建的视图矢量。

计算一般曲面的轮廓很重要,但是对于旋转扫描 + 沿旋转轴的挤压,轮廓将通过扫掠曲线的切线平行于旋转方向的点描绘出来 - 即,垂直于从旋转中心绘制的半径矢量。因此,计算二维面积的算法可能如下所示:

  1. 对于要旋转扫描的区域的每个边缘段,

  2. 分割切线与旋转方向平行的边。

  3. 排除任何退化曲线 -- 与旋转轴同轴的圆弧。

  4. 对每个分割边段,形成一个二维区域,由曲线的起始位置、曲线的结束位置、起点和终点用圆弧连接而成。因为我们是在轮廓点分割的,应该不会有自交点。

  5. 在二维区域的起始位置、结束位置和第一步中创建的扫描区域中执行 2d boolean