Javascript 我将如何实现鞋带定理来找到由相交线创建的多个凸多边形的区域?
我正在创建一段javascript代码,其中需要识别从大量随机生成的相交线创建的每个多边形。下面的屏幕截图将更好地解释我所说的内容: 现在,我需要计算每个多边形的面积并返回最大面积。我采用的方法是识别每个交点(用红点表示),并将它们视为它们所属多边形的顶点。如果我能以某种方式确定每个顶点/交点属于哪个多边形,然后按顺时针方向排列每个多边形的顶点,那么应用鞋带定理来查找每个多边形的面积就很简单了Javascript 我将如何实现鞋带定理来找到由相交线创建的多个凸多边形的区域?,javascript,algorithm,polygon,intersection,area,Javascript,Algorithm,Polygon,Intersection,Area,我正在创建一段javascript代码,其中需要识别从大量随机生成的相交线创建的每个多边形。下面的屏幕截图将更好地解释我所说的内容: 现在,我需要计算每个多边形的面积并返回最大面积。我采用的方法是识别每个交点(用红点表示),并将它们视为它们所属多边形的顶点。如果我能以某种方式确定每个顶点/交点属于哪个多边形,然后按顺时针方向排列每个多边形的顶点,那么应用鞋带定理来查找每个多边形的面积就很简单了 然而,我担心我完全迷路了,并且尝试了各种(失败的)方法来实现这一点。为每个多边形编译顺时针排列的顶点
然而,我担心我完全迷路了,并且尝试了各种(失败的)方法来实现这一点。为每个多边形编译顺时针排列的顶点列表的最佳方法是什么?我正在努力获取与每个给定交叉点相关的线段,我认为这是朝着正确方向迈出的一步,但我不知道从那里走到哪里。这需要一些向量工作吗?我能想到的两种方法可能不是最有效的,但应该会有所帮助:
希望这有帮助 我能想到一种可能性。这里我已经标记了每个顶点 我假设,如果你知道所涉及的直线及其交点,你可以找到在特定点相交的所有线段。因此,让我们从一个特定的点开始,比如说
K
,以及一个定向段IK
。现在我们有四个定向段,从那一段开始,KI
,KJ
,KL
,和KM
。我们只对最接近但不在线路上的两个感兴趣KI
。让我们关注一下KM
,尽管您可以使用KJ
做同样的事情
(请注意,如果有两条以上的直线在该点相交,我们仍然可以找到离该直线最近的两条直线,通常一条与初始线段形成正角度,另一条为负角度。)
我们注意到,IKM
是一个正角度,然后检查包含M
的段,选择与KM
具有最小正角度的段,在本例中,MF
,在F
处再次执行此操作(尽管这里只有两个选择)以获得FG
,然后选择GH
,然后是HI
,它完成了一个多边形,即六边形IKMFGH
回到原始的IK
,我们看另一个最小的角度,IKJ
,然后做一个类似的过程来找到三角形IKJ
。现在我们已经找到了所有包含IK
的多边形
然后,当然你们再做一次,每个片段。您将需要删除重复项,或者在看到路径将是重复项时更明智地不要继续分析该路径。(每个角度最多位于一个多边形中,因此如果看到已记录的角度,可以跳过该角度。)
如果你的多边形不是凸的,这将不起作用,但是如果它们是由穿过矩形的线组成的,我很确定它们总是凸的
我实际上还没有尝试编写这个代码,但我很确定它会起作用