如何用Python选取复合条件的坐标组成新的列表?
具体情况是这样的:在一定空间内有很多点(坐标已知)组成的一个元组p,现在想把距离小于5的点输入到一个元组内,然后返回一个元组的列表。应该如何编程呢?...
具体情况是这样的:在一定空间内有很多点(坐标已知)组成的一个元组p,现在想把距离小于5的点输入到一个元组内,然后返回一个元组的列表。应该如何编程呢?
展开
3个回答
展开全部
你这个问题涉及到空间数据结构的知识,如果希望全面地了解这个方面,请找本《计算几何》的书来读一读,有专门解决这个问题的高级算法。
如果只是简单地做一下,那么用一个二重循环,计算点两两之间的距离,然后输出就行了。
distance 是距离函数,nearest_point计算所有距离小于5的点组成的元组的列表。
def distance(x,y):
s=0
for i in range(len(x)):
s+=(x[i]-y[i])*(x[i]-y[i])
return math.sqrt(s)
def nearest_point(points):
dc={}
for p in points:
lp=[]
dc[p] = lp
for q in points:
if p!=q and distance(p,q)<5:
lp.append(q)
return dc
如果只是简单地做一下,那么用一个二重循环,计算点两两之间的距离,然后输出就行了。
distance 是距离函数,nearest_point计算所有距离小于5的点组成的元组的列表。
def distance(x,y):
s=0
for i in range(len(x)):
s+=(x[i]-y[i])*(x[i]-y[i])
return math.sqrt(s)
def nearest_point(points):
dc={}
for p in points:
lp=[]
dc[p] = lp
for q in points:
if p!=q and distance(p,q)<5:
lp.append(q)
return dc
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
稍微修改了下:
import math
somePoints=[[2,5],[13,2],[44,3],[1,1],[0,5],[5,0]]
def getPoints(points,maxDistance):
result = dict()
total = len(points)
for i in range(0,total):
x = points[i][0]
y = points[i][1]
t = []
for j in range(i+1,total):
x1 = points[j][0]
y1 = points[j][1]
if math.sqrt((x1-x)**2+(y1-y)**2)<=maxDistance:
t.append(points[j])
result[str(points[i])]=t
return result
for k,v in getPoints(somePoints,5).items():
print k,":",v
getPoints的参数:
points:存放所有点的坐标列表
maxDistance:设置的两点间最大距离
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你所谓的距离小于5是指: x**2 + y ** 2 < 25 吗?
def is_less_5(A):
A[0] ** 2 + A[1] ** 2 < 25
result = tuple([i for i in p if is_less_5(i)])
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询