Форум сайта python.su
Есть список точек, описанных таким классом:
class Point:
def __init__(self, x = 0, y = 0):
self.x = x
self.y = y
def distance(self, point):
return sqrt((self.x - point.x) ** 2 + (self.y - point.y) ** 2)
newKernel = Point()
newKernel.x = 0
for point in group:
newKernel.x += point.x
newKernel.x /= len(group)
Офлайн
и еще: в Python'е есть перегрузка операторов? если да, то где о ней почитать? что-то ничего не гуглится
Офлайн
Офлайн
Может так?
class Point:
def __init__(self, x = 0, y = 0):
self.x = x
self.y = y
def distance(self, point):
return sqrt((self.x-point.x)**2+(self.y-point.y)**2)
def __str__(self):
return "Point(%d,%d)" % (self.x, self.y)
def mass_center(points):
if points:
return Point(sum(pt.x for pt in points)/len(points),
sum(pt.y for pt in points)/len(points))
group = [Point(10,10),Point(10,20),Point(20,25),Point(30,20),Point(30,10)]
print mass_center(group)
Офлайн
>>> math.hypot.__doc__
'hypot(x,y) Return the Euclidean distance, sqrt(x*x + y*y).'
Офлайн
PooH, спасибо, попробую
Dimka665, здесь я привел старую версию класса Point, сейчас я вычисляю квадрат расстояния(т.е. избавился от корня), что дает небольшой прирост скорости
и что там насчет перегрузки операторов?
Офлайн
Чтобы, например, перегрузить оператор + для двух точек, надо в класс добавить функцию __add__
Например:
class Point:
def __init__(self, x = 0, y = 0):
self.x = x
self.y = y
def __add__(self, point):
return Point( self.x+point.x, self.y+point.y )
def __repr__(self):
return "Point({},{})".format( self.x, self.y )
a, b = Point(1,2), Point(3,4)
print(a+b)
Офлайн
miksayerВы чего, все опухли что ли? Центр масс, это среднее, взвешенное по массе, т.е радиус-вектор надо домножить, на ту долю массы которую он вкладывает во всю систему wiki, да простят меня физики если здесь такие есть, вроде нигде не соврал. А то что в примерах выше найдено, это к центру масс весьма отдалённое имеет отношение.
Центром масс этих точек будет точка, координатами которой будут средние арифметические значения координат точек списка.
Отредактировано (Сен. 9, 2010 20:11:46)
Офлайн
Считаем, что массы всех точек одинаковые.
Офлайн
IsemВедь это очевидно. Без комментариев.
Считаем, что массы всех точек одинаковые.
Офлайн