def updatePoints(self, func = None): """ recalculates points according to the function func @param func: a function R -> R^3 """ if func is not None: self.function = fix_function(func,self.intervals[0][0]) self.domainPoints = [] for it, line in zip(self.intervals, self.lines): domain, points = refine(self.function, it, self.max_angle, self.max_distance) self.domainPoints += domain line.setPoints(points) for f in self.fields.values(): f.updatePoints(self.domainPoints, self.points)
def __init__(self, func, interval, color=(1, 1, 1), width=1, nvertices= -1, max_distance = None, max_angle = None): super(Curve3D, self).__init__() self.__derivative = None self.fields = {} self.lines = [] self.intervals = normalize_interval(interval) self.domainPoints = [] self.max_distance = max_distance self.max_angle = max_angle ## self.interval[0][0] is the start of the first interval ## should be a valid value, anyway self.function = fix_function(func, self.intervals[0][0]) for it in self.intervals: domain, points = refine(self.function, it, max_angle, max_distance) self.domainPoints += domain self.lines.append(Line(points, color, width, nvertices)) self.separator.addChild(self.lines[-1].root) ## <--- container feature!! self.lengths = map(len, self.lines) self.animation = Animation(self.setNumVertices, (4000, 1, len(self)-1))