我有一个有许多直线的2D绘图。 所有这些线都是数学上已知的。而且他们独立于其他人。
你可以认为我知道每条线的起点和终点,我可以让它们相交以找到所有的交点。 (详细地说,它们属于Autocad,但我只能通过代码工作。所以,我希望Algorythm不仅仅是Autocad解决方案,尽管也欢迎Autocad解决方案。)
问题是:给定一个点(任何地方),我想找到包含它的较小多边形。该多边形将由最近的线形成。
详细说明:
我没有声明的多边形。只是线条。 任意数量的线,任何大小,任何位置。一个给定的点。
这些线可以形成一个多边形,很多或没有。所以多边形看起来没有规则。任意数量的方面,没有规律性。 (形成多边形的点是通过相交线找到的。线条是有限的,如果它们不相交,它们就不会形成多边形。)
我的答案是可能包含给定点的最小多边形。
答案 0 :(得分:2)
好的,我一直在思考这个问题,我已经制定了一个backtracking 算法,我相信它会起作用。我们的想法是,您将尝试以逆时针方式构建多边形。我们将设置问题,使我们找到的第一个多边形最小。这样,我们就不必找到所有这些。
<强>算法:强>
在新发现的一行......
一个。遍历所有其他线路,这些线路尚未成为您正在构建的形状的一部分,找到与此线路的交点 B.相对于目标点逆时针对交点排序
在当前行上逆时针查找下一个交叉点。如果这是我们检查这一行的第一点,那么“下一个”点就是将我们带到这一行的交叉点之后的那一点。
一个。如果没有这样的观点(这可能意味着我们已经检查了当前行的所有点),那么当前的候选解决方案是不可行的......
B中。如果形成交点的线在其左侧(逆时针)没有目标点,则它将形成的多边形不包围目标点。 对下一个点的当前行重复步骤4
C.如果形成交叉点的线是您开始的线,那么我们找到了解决方案
D.如果上述情况均不属实,则对构成交叉点的直线执行步骤3 。
<强>优化:强>
<强>说明:强>
答案 1 :(得分:1)
我相信以下算法可行: