正如我所看到的,只有一种独特的方法可以在不分割多边形且没有边相交的情况下关闭多边形。
关闭边缘将是b-> c,d-> e,f-> g,h-> a
有没有实现这一目标的算法?
我只能想到一种暴力方法,尝试每种可能的组合并检查它是否形成一个封闭的多边形(检查它是否为闭合多边形的任何好的算法?)
有没有更好的方法或已知的算法?
注意:顶点应仅由单条直线连接,而多边形不一定是凸面
此外,您可以放心地假设这些线段始终形成一个多边形,因为我从多边形中获取这些线段并且我试图重新创建多边形
答案 0 :(得分:2)
我认为,在“表现良好”(小间隙,不太不规则形状等)的情况下,人们可能会采取以下方法。我们的想法是假设解决方案(输入线段的特定排列,然后假设与直线连接)最小化了定义感兴趣多边形边界的结果MultiLineString的长度。
为了解决这个问题,下面的实现使用2-opt启发式方法来解决旅行商问题。它按以下步骤进行:
public ApplicationUserManager(IUserStore<ApplicationUser> store) : base(store)
{
UserValidator = new UserValidator<ApplicationUser>(this)
{
AllowOnlyAlphanumericUserNames = false,
RequireUniqueEmail = true
};
}
- 循环中的额外if
条件处理。结果是:
for
答案 1 :(得分:0)