diff --git a/bezier.py b/bezier.py index f9c12db..1eded10 100644 --- a/bezier.py +++ b/bezier.py @@ -9,18 +9,19 @@ class Bezier: if len(args) == 2: self.x = args[0] self.y = args[1] - else: - #TODO find proper exception - raise RuntimeError('') if 'step' in kwargs: - self.step = kwargs[step] + self.step = kwargs['step'] else: self.step = 1e-3 + if 'points' in kwargs: + self.points = kwargs['points'] + else: + self.points = False def __getitem__(self, t): def stepper(start, stop, step): t = start - c = lambda x,y: x>y if stop > start else lambda x,y: y>x + c = (lambda x,y: x>=y) if (start > stop) else (lambda x,y: y>=x) while c(t, stop): yield t t += step @@ -44,18 +45,20 @@ class Bezier: else: stop = 0 if step is None or step == 0: - step = abs(self.step) if stop > step else -abs(step) - start = min(start, 1) - start = max(start, 0) - stop = min(stop, 1) - stop = max(stop, 0) - return [self[i] for i in stepper(start, stop, step)] + step = abs(self.step) if stop > start else -abs(step) + start = max(min(start, 1), 0) + stop = max(min(stop, 1), 0) + if self.points: + return [self[i] for i in stepper(start, stop, step)] + else: + pnts = [self[i] for i in stepper(start, stop, step)] + return [[i[0] for i in pnts], [i[1] for i in pnts]] else: n = len(self.x) - 1 x = 0 y = 0 for i in range(n+1): #eww - x += self.x[i]*((1-t)**i)*(t**(n-i))*fact(n)/fact(i)/fact(n-i) - y += self.y[i]*((1-t)**i)*(t**(n-i))*fact(n)/fact(i)/fact(n-i) + x += self.x[i]*((1-t)**(n-i))*(t**i)*fact(n)/fact(i)/fact(n-i) + y += self.y[i]*((1-t)**(n-i))*(t**i)*fact(n)/fact(i)/fact(n-i) return (x, y)