【问题标题】:Removing old, overlaid circles (crater) from density diagram从密度图中删除旧的重叠圆圈(陨石坑)
【发布时间】:2017-11-16 01:10:08
【问题描述】:

我正在编写代码来创建陨石坑密度图。本质上,每个新的陨石坑都被绘制成一个圆圈,并且圆圈可以相互重叠(因为新的陨石坑可以抹去旧的陨石坑)。我想知道是否有任何方法可以删除已覆盖的圆圈,或者创建一个计数器来仅计算有多少个不间断的圆圈?我的目标是计算有多少“新”陨石坑(圆圈)未被其他陨石坑抹去。第一个代码是我创建和绘制这些圆圈的代码(xx+1,yy+1 是添加“阴影”效果)。

fig, ax = pl.subplots()

#this is going to create a random list to pull center coordinates from
xcenter = np.random.randint(501, size = 500)
ycenter = np.random.randint(501, size = 500)
#start a counter at 0 so we can see the progression of time
time = 0
#now to zip the x and y center coordinates and make circles
for xx, yy in zip(xcenter, ycenter): 
    cratershadow = Circle((xx, yy),5, color = 'b')
    ax.add_patch(cratershadow)
    crater = Circle((xx+1, yy+1), 5, color = 'c')
    ax.add_patch(crater)
    time += 1
#setting the axiis(?) to be up to 500 km
ax.set_xlim((0,500))
ax.set_ylim((0,500))
pl.xlabel("X side, 500 km Field")
pl.ylabel("Y side, 500 km Field")
pl.title("Crater Density Plot - 500,000 years")
pl.show()

【问题讨论】:

  • 这将有助于包含您的 import 声明,我想出了它们并制作了情节。但问题超出了本论坛的范围 - 您需要决定一种方法是否面向对象只是第一选择

标签: python geometry erase graphing


【解决方案1】:

您需要以list 的某种形式记住所有陨石坑,并在任何新添加的一项检查交叉点/重叠。如果有任何陨石坑完全位于内部,请将其从list 中移除。仅绘制list 的最终结果。

您还可以创建一个时间线结构,其中每个陨石坑都有开始和结束时间,因此无需从列表中删除,只需将其结束时间设置为从无穷大到添加新陨石坑的时间。这样您就可以随着时间的推移为密度设置动画。

对不起,我不是 python 编码器,但在 C++ 中它看起来像这样:

struct _crater
 {
 int x,y,r; // center and radius
 int t0,t1; // start and end time
 };

List<_crater> crater;

要检查 2 个陨石坑 i,j 是否相交/重叠,您可以测试它们的距离...

int d=sqrt(((crater[i].x-crater[j].x)*(crater[i].x-crater[j].x))+((crater[i].y-crater[j].y)*(crater[i].y-crater[j].y)));
if (d>=crater[i].r+crater[j].r); // too far away or just touching
if (d< crater[i].r+crater[j].r); // intersect or overlap
if (crater[i].r>=crater[j].r)
 if (d<=crater[i].r-crater[j].r); // i fully covers j

如果您实施了时间线,您需要仅考虑当前的陨石坑......而忽略其他陨石坑。

为了加快速度,您可以使用排序和二分搜索...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-01-03
    • 1970-01-01
    • 2021-03-21
    • 1970-01-01
    • 2011-07-31
    • 2013-10-29
    • 2020-03-01
    • 2017-01-16
    相关资源
    最近更新 更多