我正在写一个代码来绘制陨石坑密度图。基本上,每一个新的陨石坑都被绘制成一个圆圈,圆圈可以相互重叠(因为新的陨石坑可以抹去旧的陨石坑)。我想知道是否有任何方法可以删除已经覆盖的圆,或者创建一个计数器来只计算有多少个不间断的圆?我的目标是计算有多少“新鲜”的陨石坑(圆圈)没有被其他陨石坑抹去。第一个代码是我创建和绘制这些圆的代码(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()
你需要记住所有以某种形式出现的陨石坑
list
,并在任何新添加的一个检查点上检查交点/重叠。如果任何弹坑完全在内部,则将其从list
上移除。仅打印list
的最终结果您还可以创建一个时间线结构,其中每个陨石坑都有开始和结束时间,因此不必从列表中删除,只需将其结束时间从无穷大设置为添加新陨石坑的时间。这样,可以随时间设置密度的动画
对不起,我不是Python编码器,但在C++中,它会是这样的:要检查两个陨石坑是否相交/重叠,您可以测试它们的距离
如果你实施了时间线,你需要只考虑当前的陨石坑。。。忽略其他的
为了加快速度,您可以使用排序和二进制搜索
相关问题 更多 >
编程相关推荐