删除最小数量的重叠圆?

有什么方法可以删除最小数量的重叠圆以获得最大数量的不重叠圆?

问题插图:

在此处输入图片说明

我想删除重叠的圆圈,但要保持最大的效果。对于上述问题,结果应为:

在此处输入图片说明

我试图通过创建每个圆的组合来进行硬编码,然后计算相交和不相交的数量。但是,这花费了太长时间。有没有针对这种问题的快速解决方案?

罗曼F

请尝试这样做,它应该可以工作;)您需要安装pulp该脚本分为3部分:

  • 您的问题的参数化
  • 随机生成圆(我制作了随机半径,但必要时可以使用固定半径)
  • 解决方案 pulp
from pulp import LpMaximize, LpProblem, LpStatus, lpSum, LpVariable
import numpy as np
import matplotlib.pyplot as plt
from numpy.random import rand

#%% PARAMETRIZE the PROBLEM
N = 10 # number of circles
X = 15 # size on X
Y = 15 # size on Y

Rmin = 1 # min radius
Rmax = 2 # max radius

#%% GENERATE RANDOM CIRCLES

cx = rand(N)*(X-2*Rmax) + Rmax
cy = rand(N)*(Y-2*Rmax) + Rmax
r  = rand(N)*(Rmax-Rmin) + Rmin

plt.figure(1)
plt.clf()
for i in range(N): plt.gca().add_artist(plt.Circle((cx[i], cy[i]), r[i], alpha=0.7))
plt.axis('image')
plt.xlim(0,X)
plt.ylim(0,Y)


#%% GET SOLUTION
model = LpProblem(name="small-problem", sense=LpMaximize)
var = [LpVariable(name="x%u"%i, lowBound=0,upBound=1,cat='Integer') for i in range(N)]

# Add objective function to model
model += lpSum(var)

# Add constraints
for i in range(N):
    for j in range(i+1,N):
        dij = np.sqrt((cx[i]-cx[j])**2 + (cy[i]-cy[j])**2)
        if dij < (r[i]+r[j]):
            model += (var[i]+var[j]<=1,"intersec %u - %u"%(i,j))


# Solve it
status = model.solve()
print(f"status: {model.status}, {LpStatus[model.status]}")
print(f"objective: {model.objective.value()}")
for v in model.variables():
    print(f"{v.name}: {v.value()}")
    if v.value():
        i = int(v.name[1])
        plt.gca().add_artist(plt.Circle((cx[i], cy[i]), r[i],fc='none',ec='C1',lw=2))

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

从数组中选择最小数量并删除其余的JavaScript

来自分类Dev

PostgreSQL获得最小数量(*)?

来自分类Dev

PostgreSQL获得最小数量(*)?

来自分类Dev

删除具有最小数量的嵌套模型时出现的问题

来自分类Dev

删除边的最小数量以断开图中的两个顶点

来自分类Dev

删除具有最小数量的嵌套模型时出现的问题

来自分类Dev

TEdit:自动完成并限制最小数量

来自分类Dev

SVG的最小数量是多少?

来自分类Dev

Clojure:支持meta的最小数量实现?

来自分类Dev

SQL:如何获取最小数量?

来自分类Dev

查找最小数量并打印的功能

来自分类Dev

Hough变换分割后如何删除重叠的圆

来自分类Dev

Hough变换分割后如何删除重叠的圆

来自分类Dev

删除或最小化图像中的重叠

来自分类Dev

查找交换的最小数量以对数组进行排序

来自分类Dev

如何计算最大字符串的最小数量?

来自分类Dev

如何找到最小数量的几个变量并返回列名

来自分类Dev

尝试确定Java数组中的最小数量和位置

来自分类Dev

寻找所需的“中心点”的最小数量

来自分类Dev

盖“曼哈顿天际线”使用矩形的最小数量

来自分类Dev

在涵盖特定值的列表中查找最小数量的元素

来自分类Dev

在Python中递归地实现“最小数量的硬币”

来自分类Dev

对数组进行排序的“插入”的最小数量

来自分类Dev

如何计算mysql上A和B的最小数量?

来自分类Dev

如何找到最小数量的几个变量并返回列名

来自分类Dev

Optaplanner:如何处理连续的最小数量

来自分类Dev

修改numpy数组以获取元素之间的最小数量的值

来自分类Dev

如何在for循环中找到最小数量?

来自分类Dev

更新基于最小数量与状态列在mysql中的列?

Related 相关文章

热门标签

归档