From: Tomas Musil Date: Wed, 24 Oct 2012 13:01:00 +0000 (+0200) Subject: better vector class X-Git-Url: http://git.tomasm.cz/imago.git/commitdiff_plain/db4fb6da5dc88a3944352cff38cb92f68bead88c?ds=sidebyside;hp=04fed003945a46c6399db7eb94e81f2b215b87a8 better vector class --- diff --git a/gridf.py b/gridf.py index 50beb81..23e4d04 100644 --- a/gridf.py +++ b/gridf.py @@ -16,7 +16,7 @@ class MyGaussianBlur(ImageFilter.Filter): def filter(self, image): return image.gaussian_blur(self.radius) -class V(): +class V(object): def __init__(self, x, y): self.x = x self.y = y @@ -30,16 +30,29 @@ class V(): def __rmul__(self, other): return V(other * self.x, other * self.y) - def t(self): - return (self.x, self.y) + def __len__(self): + return 2; + def __getitem__(self, key): + if key == 0: + return self.x + elif key == 1: + return self.y + elif type(key) != int: + raise TypeError("V indices must be integers") + else: + raise KeyError("V index ({}) out of range".format(key)) + + def __iter__(self): + yield self.x + yield self.y + + @property def normal(self): return V(-self.y, self.x) def projection(point, line, vector): - n = vector.normal() - l2 = g_line(point.t(), (point + n).t()) - return V(*intersection(l2, g_line(*line))) + return V(*intersection(g_line(point, point + vector.normal), g_line(*line))) def error_surface(lines, a, b, c, d, hough, size, v1): import matplotlib.pyplot as plt @@ -132,8 +145,8 @@ def find(lines, size, l1, l2, bounds, hough, do_something): return grid, grid_lines def get_grid(a, b, c, d, hough, size): - l1 = hough.lines_from_list([a.t(), b.t()]) - l2 = hough.lines_from_list([c.t(), d.t()]) + l1 = hough.lines_from_list([a, b]) + l2 = hough.lines_from_list([c, d]) c = intersections_from_angl_dist([l1, l2], size, get_all=True) #TODO do something when a corner is outside the image corners = (c[0] + c[1])