Graphics 两个相交多边形之间的平滑过渡(有趣的问题)

Graphics 两个相交多边形之间的平滑过渡(有趣的问题),graphics,polygons,Graphics,Polygons,我有一个有趣的问题,我一直在努力解决一段时间。没有“正确”的解决方案,因为没有严格的成功标准。我想要完成的是两个简单多边形之间的平滑过渡,从多边形a到多边形B。多边形a完全包含在多边形B中 我的过渡标准是: 这种转变在时间和空间上是连续的 从多边形A“填充”到多边形B的区域应该被填充,就像A中有液体正以B的形状流出一样 重要的是,此动画可以动态计算,也可以由一组需要很少空间(例如小于几Kb)的参数定义 作弊是完全没问题的,任何解决方法都是可行的 我考虑过的解决方案,基本上排除了: 将A和B中的

我有一个有趣的问题,我一直在努力解决一段时间。没有“正确”的解决方案,因为没有严格的成功标准。我想要完成的是两个简单多边形之间的平滑过渡,从多边形a到多边形B。多边形a完全包含在多边形B中

我的过渡标准是:

  • 这种转变在时间和空间上是连续的
  • 从多边形A“填充”到多边形B的区域应该被填充,就像A中有液体正以B的形状流出一样
  • 重要的是,此动画可以动态计算,也可以由一组需要很少空间(例如小于几Kb)的参数定义
  • 作弊是完全没问题的,任何解决方法都是可行的

    我考虑过的解决方案,基本上排除了:

    • 将A和B中的顶点配对并进行简单插值。在凹多边形的情况下,外观不好且不起作用
    • 将区域B-A划分为凸多边形(可能是Voronoi图),并通过对较小的凸多边形进行BFS计算多边形的离散状态。然后我在离散状态之间插值。注意:如果多边形B-A是凸的,则过渡相当简单。我没有使用这个解决方案,因为将B-A划分成大小相等的小凸多边形是非常困难的
    • 模拟:细分多边形A。以离散但小的步骤沿多边形线法线(向外)移动每个顶点。对于每个步骤,检查顶点是否仍在B内。如果不在B内,则返回到上一个位置。重复直到A等于B。我不喜欢这个解决方案,因为检查顶点是否在多边形内的速度很慢

    有人有什么不同的想法吗?

    如果你想保持这个简单和快速,你可以继续考虑你的最后一个想法,在这里你考虑缩放多边形A,以便它逐渐填充多边形B。你不必检查缩放的外顶点是否仍然在多边形B中。可以用多边形B的轮廓遮罩展开多边形A的像素


    在现代OpenGL中,可以在片段着色器中执行此操作。您必须将多边形B渲染为纹理,将该纹理发送到着色器,然后使用该纹理查找当前渲染片段是否映射到多边形B设置的纹理值。如果未映射,则该片段将被丢弃。你需要让纹理和屏幕一样大。如果没有,则需要在着色器中包含一些摄影机计算,以便可以“渲染”片段以测试纹理,方法与将多边形B渲染到该纹理中的方法相同。

    对于堆栈溢出来说,这实际上不是一个合适的问题。它太宽泛了,你基本上要求别人为你写代码(或者至少为你想出一个算法)。