我有一段代码,它以条件C作为输入,并计算在(x,y)空间上的“允许区域”A作为我的问题的解决方案。该区域由多个“管道”组成,这些管道由两条永远不会交叉的线定义。
我要求的最终结果必须满足k个条件{C1,..,Ck},因此是k个区域{A1,..,Ak}之间的交集S。
以下是一个示例,其中有2个条件(A1:绿色,3个管道。A2:紫色,1个管道);解决方案S为红色。 我如何在处理大约10个管道的4个区域时找到S?(最终图形很糟糕!)
我需要能够绘制它,并找到S中点的平均坐标和方差(每个坐标的方差)。[如果有一种有效的方法可以知道点P是否属于S,则只需使用蒙特卡罗方法]。
理想情况下,我还希望能够实现“禁止管道”,并将其从S中删除[这可能比将S与我的禁止区域外部相交要复杂一些,因为来自同一区域的两个管道可以相交(即使定义管道的线从未相交)]。
注意:
我要求的最终结果必须满足k个条件{C1,..,Ck},因此是k个区域{A1,..,Ak}之间的交集S。
以下是一个示例,其中有2个条件(A1:绿色,3个管道。A2:紫色,1个管道);解决方案S为红色。 我如何在处理大约10个管道的4个区域时找到S?(最终图形很糟糕!)
我需要能够绘制它,并找到S中点的平均坐标和方差(每个坐标的方差)。[如果有一种有效的方法可以知道点P是否属于S,则只需使用蒙特卡罗方法]。
理想情况下,我还希望能够实现“禁止管道”,并将其从S中删除[这可能比将S与我的禁止区域外部相交要复杂一些,因为来自同一区域的两个管道可以相交(即使定义管道的线从未相交)]。
注意:
代码还存储了线的弧长。
这些线被存储为点的数组(每条线大约有1000个点)。定义管道的两条线不一定具有相同数量的点,但Python可以将它们所有点作为其弧长的函数在1秒内插值。
这些线是参数函数(即我们不能写成y = f(x),因为线允许是垂直的)。
绘图使用画图软件进行编辑以获得右侧的结果...效率不高!
编辑:
我不知道如何使用plt.fill_between进行多重交点(我可以在这里处理2个条件,但当有太多线条需要眼睛判断时,我需要代码自动执行它)。
目前我只是生成了这些线。我没有编写任何内容来找到最终解决方案,因为我绝对不知道哪种结构最适合此问题。[然而,代码的早期版本能够找到两个不同管道的线之间的交点,并且我计划将它们作为多边形传递给shapely,但这涉及到其他几个问题..]
我不认为我能用
sets
做到这一点:在所需精度下扫描整个(x,y)区域表示约6e8个点... [由于可变步长(适应曲率),这些线仅具有1e3个点,但整个问题相当大]
y = x + x ^ 2-5
),则可以使用标准优化工具解决问题。如果您有由点表示的线条,则可以通过多项式近似线条,然后使用优化来找到面积。虽然不是非常容易的问题,但是可以完成。 - Imanol Luengo