diff --git a/algorithm.py b/algorithm.py index 5b67015..fb78445 100644 --- a/algorithm.py +++ b/algorithm.py @@ -105,6 +105,8 @@ class NearestNeighborsSweep(Algorithm): for pnt in self._sss["points"]: if self._sss["mindist"] is None: self._sss["mindist"] = linesegment.LineSegment(pnt, event).get_length() + self._result["points"][0] = pnt + self._result["points"][1] = event elif (event.get_y() - self._sss["mindist"]) < \ pnt.get_y() < (event.get_y() + self._sss["mindist"]): distance = linesegment.LineSegment(pnt, event).get_length() @@ -154,27 +156,38 @@ class NearestNeighborsSweep(Algorithm): def draw(self, canvas, width, height, max_x, max_y): """Draw the algorithm state on a canvas""" canvas.delete("all") - for pnt in self._input: - if len(self._es) > 0 and pnt == self._es[0]: - cur_x, cur_y = self._es[0].draw(canvas, width, height, max_x, max_y, "#0000FF") - canvas.create_line(cur_x, 0, cur_x, height, fill="#0000FF") - if self._sss["mindist"]: - canvas.create_line(cur_x - (self._sss["mindist"] * width / max_x), 0, \ - cur_x - (self._sss["mindist"] * width / max_x), height, fill="#0000FF") - canvas.create_line(cur_x - (self._sss["mindist"] * width / max_x), \ - cur_y - (self._sss["mindist"] * height / max_y), \ - cur_x, cur_y - (self._sss["mindist"] * height / max_y), fill="#0000FF") - canvas.create_line(cur_x - (self._sss["mindist"] * width / max_x), \ - cur_y + (self._sss["mindist"] * height / max_y), \ - cur_x, cur_y + (self._sss["mindist"] * height / max_y), fill="#0000FF") + if self._running: + for pnt in self._input: + if len(self._es) > 0 and pnt == self._es[0]: + cur_x, cur_y = self._es[0].draw(canvas, width, height, max_x, max_y, "#0000FF") + canvas.create_line(cur_x, 0, cur_x, height, fill="#0000FF") + if self._sss["mindist"]: + canvas.create_line(cur_x - (self._sss["mindist"] * width / max_x), 0, \ + cur_x - (self._sss["mindist"] * width / max_x), height, fill="#0000FF") + canvas.create_line(cur_x - (self._sss["mindist"] * width / max_x), \ + cur_y - (self._sss["mindist"] * height / max_y), \ + cur_x, cur_y - (self._sss["mindist"] * height / max_y), fill="#0000FF") + canvas.create_line(cur_x - (self._sss["mindist"] * width / max_x), \ + cur_y + (self._sss["mindist"] * height / max_y), \ + cur_x, cur_y + (self._sss["mindist"] * height / max_y), fill="#0000FF") + else: + canvas.create_line(0, 0, 0, max_y, fill="#0000FF") + if pnt in self._result["points"]: + pnt.draw(canvas, width, height, max_x, max_y, "#FF0000") else: - canvas.create_line(0, 0, 0, max_y, fill="#0000FF") - if pnt in self._result["points"]: - pnt.draw(canvas, width, height, max_x, max_y, "#FF0000") - else: - pnt.draw(canvas, width, height, max_x, max_y) - if self._result["points"][0]: - linesegment.LineSegment( \ - self._result["points"][0], self._result["points"][1] \ - ).draw(canvas, width, height, max_x, max_y, "#FF0000") + pnt.draw(canvas, width, height, max_x, max_y) + if self._result["points"][0]: + linesegment.LineSegment( \ + self._result["points"][0], self._result["points"][1] \ + ).draw(canvas, width, height, max_x, max_y, "#FF0000") + else: + for pnt in self._input: + if pnt in self._result["points"]: + pnt.draw(canvas, width, height, max_x, max_y, "#FF3333") + else: + pnt.draw(canvas, width, height, max_x, max_y, "#222222") + if self._result["points"][0]: + linesegment.LineSegment( \ + self._result["points"][0], self._result["points"][1] \ + ).draw(canvas, width, height, max_x, max_y, "#FF0000")