Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Graphics 如何避免多边形在优化其顶点时变得复杂?_Graphics_Polygon_Computational Geometry - Fatal编程技术网

Graphics 如何避免多边形在优化其顶点时变得复杂?

Graphics 如何避免多边形在优化其顶点时变得复杂?,graphics,polygon,computational-geometry,Graphics,Polygon,Computational Geometry,假设有一组二维点来表示初始简单多边形。现在我想根据一些成本函数优化每个点的位置。但这可能会使多边形变得复杂,即多边形与其自身相交。我怎样才能避免这种情况?谢谢 如果可以假定多边形是凸的,那么它很简单。只需计算每一侧和下一侧之间的角度。对于凸多边形,每个角度必须介于0到180度之间。对于有N条边的闭合多边形,这些角度之和是众所周知的。这将导致一个简单的约束优化。(实际上,你可以用一种比用三角函数计算角度“更简单”的形式来写这些约束。叉积就足够了。) 如果多边形不需要是凸的,那么您需要担心边交叉或其

假设有一组二维点来表示初始简单多边形。现在我想根据一些成本函数优化每个点的位置。但这可能会使多边形变得复杂,即多边形与其自身相交。我怎样才能避免这种情况?谢谢

如果可以假定多边形是凸的,那么它很简单。只需计算每一侧和下一侧之间的角度。对于凸多边形,每个角度必须介于0到180度之间。对于有N条边的闭合多边形,这些角度之和是众所周知的。这将导致一个简单的约束优化。(实际上,你可以用一种比用三角函数计算角度“更简单”的形式来写这些约束。叉积就足够了。)


如果多边形不需要是凸的,那么您需要担心边交叉或其他退化。

谢谢woodchips!多边形不一定是凸的。你说的边缘交叉是什么意思?使用扫描线算法准确检测任何线段是否与另一线段相交。这显然是你的问题。您需要确保没有两条边交叉,因为这显然是一个问题。您还需要注意多边形的边在顶点处相交。扫描线算法看起来很简单,我想知道它是否可以作为优化的显式约束。谢谢。如果写起来真的很琐碎,那你为什么还没有写呢?很多事情都很容易想象,但是当你试着用实际的工作代码写下来的时候会有点复杂。对不起,也许我用错了词(因为我的英语很差)。我的意思是扫描线算法不容易集成到优化中。