Python: closest coordinate?

匿名 (未验证) 提交于 2019-12-03 01:18:02

问题:

I need help with a function that returns coordinate from a list of coordinates, that's closest to some point. For example: closest((9, 2), {(0, 0), (10, 0), (10, 10)}) returns (10, 0).

回答1:

class Point:     def __init__(self,x,y):         self.x = x         self.y = y     def closest(self,*points):                    return min(points,key=lambda x:abs(x-self))     def __sub__(self,other):         return Point((self.x-other.x) , (self.y - other.y))     def __pow__(self,powTo):         return Point(self.x**powTo,self.y**powTo)      def __iter__(self):         yield self.x         yield self.y     def __abs__(self):         return sum(self**2)**0.5     def __str__(self):         return "(%s,%s)"%(self.x,self.y)  pt0 = Point(9,2) print pt0.closest(Point(0,0),Point(10,0),Point(10,10)) 

is one way you could do it ;)

a slightly simpler way(given that you have written your dist method)

def closest(p0,otherPoints):     def distTo(p):         def _inner(other):             return dist(p,other)         return inner     return min(otherPoints,key=distTo(p0)) 

or even simpler

def closest(p0,otherPoints):     return min(otherPoints,key=lambda x:dist(p0,x)) 


回答2:

from math import sqrt  def euqli_dist(p, q, squared=False):     # Calculates the euclidean distance, the "ordinary" distance between two     # points     #      # The standard Euclidean distance can be squared in order to place     # progressively greater weight on objects that are farther apart. This     # frequently used in optimization problems in which distances only have     # to be compared.     if squared:         return ((p[0] - q[0]) ** 2) + ((p[1] - q[1]) ** 2)     else:         return sqrt(((p[0] - q[0]) ** 2) + ((p[1] - q[1]) ** 2))  def closest(cur_pos, positions):     low_dist = float('inf')     closest_pos = None     for pos in positions:         dist = euqli_dist(cur_pos,pos)         if dist 

Output:

(10, 0) 

If my math is not wrong. ;)

I'm using this formula



标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!