def __calcInitialCentroids(): self.__centroidByEvent = {} self.__centroids = [] def createCentroid(point): centroid = Centroid() centroid.addMember(point) self.__centroidByEvent[point] = centroid self.__centroids.append(centroid) maxDist = 0 points = None if len(self.__eventList)>1: cursors = self.__eventList.getCursors() for p in cursors: for q in cursors: dist = getDistSquared(p.getPos(),q.getPos()) if dist >= maxDist and p != q: points = p,q maxDist = dist assert(points) for point in points: createCentroid(point) elif len(self.__eventList) == 1: createCentroid(self.__eventList.getCursors()[0])
def __calcMemberships (self): """ returns True if a membership changed, else False.""" changed = False if not len(self.__centroids): return changed for point in self.__eventList.getCursors(): closestCentroid = self.__centroids[0] minDist = getDistSquared(point.getPos(), closestCentroid.getPos()) for centroid in self.__centroids: distance = getDistSquared (point.getPos(), centroid.getPos()) if distance < minDist: minDist = distance closestCentroid = centroid if not closestCentroid.hasMember(point): self.__doNewMotion = True if point in self.__centroidByEvent: self.__centroidByEvent[point].removeMember(point) self.__centroidByEvent[point] = closestCentroid closestCentroid.addMember(point) changed = True return changed