我有一个平面上大约10个圆的中心和半径的列表。我还有一张大约100个点的列表,分散在飞机周围。用肉眼观察,有些点非常接近,甚至在一个圆内,而另一些点离任何圆都非常远。一些圆也非常接近,在这个区域也存在许多点
数据相当简单:
圆圈:
X Y Radius
0 -19.370525 -20.997882 22.486245
1 -33.666281 15.665494 8.487290
2 -24.816294 -47.834261 6.830408
要点:
X Y
0 -33.839499 -12.905389
1 -34.018966 17.154616
2 -34.019669 -22.445386
我本质上是在寻找一种方法,找出哪些点最有可能与给定的圆相关联。我还需要能够找到何时没有点可能与一个圆关联,并确定何时一个点可能与多个圆关联。理想情况下,这也能够解释在寻找关联可能性时不同圆具有不同半径的事实
我试过几种不同的方法:
from astroML.plotting.tools import draw_ellipse
point_array = np.array([circles['X'],circles['Y']).T
gmm = GaussianMixture(10).fit(point_array)
log_dens = gmm.score_samples(point_array)
gmm_x = gmm.means_[:,0]
gmm_y = gmm.means_[:,1]
gmm_weights = gmm.weights_
fig = plt.figure()
ax = fig.add_subplot(111)
ax.scatter(gmm_x,gmm_y,c='k')
ax.scatter(points['X'],points['Y'],c='r')
for mu, C, w in zip(gmm.means_,gmm.covariances_,gmm.weights_):
draw_ellipse(mu,C,ax=ax,fc='none',ec='k')
p_circ_point = []
for i in range(0,10):
p_member_loc = []
circ_x = circles['X'].values[i]
circ_y = circles['Y'].values[i]
circ_rad = circles['Radius'].values[i]
clus_err = 0.1 * circ_rad
for j in range(len():
point_x = points['X'][j]
clump_y = points['Y'][j]
delta_x = circ_x - point_x
delta_y = circ_y - circ_y
dist_clus_clump = np.sqrt(delta_x**2 + delta_y**2)
p_l_m = (1/(np.sqrt(2*np.pi)*clus_err)) * \
np.e**(-(dist_clus_clump**2)/(2*clus_err**2))
p_member_loc = np.append(p_member_loc,p_l_m)
p_circ_point = np.append(p_circ_point,p_member_loc)
我也尝试了一些其他的方法来弥补类似的失败。如果您有任何想法或建议,我们将不胜感激。谢谢大家!
你对这个问题的描述很模糊。这些点和圆是如何定义的
如果你有简单的定义,这不是一个简单的问题,决定一个点属于哪个圆,或者计算点到圆的中心的距离和圆的半径之间的比率吗
如果
radius(c1) / distance_to_centre(p1, c1) > 1
,则点p1
位于圆c1
中。如果你为每个圆cx计算radius(cx) / distance_to_centre(p, cx)
,那么值最高的那一个就是你要找的圆(注意:如果点落在圆的中心,请小心,如果不检查,将得到一个除以零的结果)
如果您提供一些示例数据,那么代码应该很简单
相关问题 更多 >
编程相关推荐