@Test public void shouldReturnTheCorrectSize() { assertEquals(0, cut.size()); cut.insert(new Point2D(.0, .0)); assertEquals(1, cut.size()); cut.insert(new Point2D(.1, .1)); assertEquals(2, cut.size()); }
@Test public void shouldGiveTheCorrectNearestPoint() { cut.insert(new Point2D(.0, .0)); cut.insert(new Point2D(.0, .1)); cut.insert(new Point2D(.0, .2)); cut.insert(new Point2D(.0, .3)); cut.insert(new Point2D(.0, .4)); Point2D nearest = cut.nearest(new Point2D(.2, .2)); assertEquals(new Point2D(.0, .2), nearest); }
@Test public void shouldGiveTheCorrectRange() { cut.insert(new Point2D(.0, .0)); cut.insert(new Point2D(.1, .1)); cut.insert(new Point2D(.2, .2)); cut.insert(new Point2D(.3, .3)); cut.insert(new Point2D(.4, .4)); cut.insert(new Point2D(.5, .5)); List<Point2D> range = (List<Point2D>) cut.range(new RectHV(.1, .1, .4, .4)); assertEquals(4, range.size()); assertTrue(range.contains(new Point2D(.1, .1))); assertTrue(range.contains(new Point2D(.2, .2))); assertTrue(range.contains(new Point2D(.3, .3))); assertTrue(range.contains(new Point2D(.4, .4))); }
@Test public void shouldCorrectlyDiscoverIfElementIsInSET() { cut.insert(new Point2D(.1, .1)); assertFalse(cut.contains(new Point2D(.0, .0))); assertTrue(cut.contains(new Point2D(.1, .1))); }
/** @param args */ public static void main(String[] args) { KdTree tree = new KdTree(); Point2D p1 = new Point2D(0.5, 0.5); Point2D p2 = new Point2D(0.25, 0.5); Point2D p3 = new Point2D(0.75, 0.5); tree.insert(p1); tree.insert(p2); tree.insert(p3); Point2D qp = new Point2D(0.5, 0.49); Point2D np = tree.nearest(qp); StdOut.println(np.x() + ", " + np.y()); }
@Test(expected = NullPointerException.class) public void shouldThrowNullPointerExceptionWhenInsertingNull() { cut.insert(null); }
@Test public void shouldReturnFalseIfSetIsNotEmpty() { cut.insert(new Point2D(.0, .0)); assertFalse(cut.isEmpty()); }
public static void main(String[] args) { String filename = args[0]; In in = new In(filename); StdDraw.show(0); // initialize the data structures with N points from standard input PointSET brute = new PointSET(); KdTree kdtree = new KdTree(); while (!in.isEmpty()) { double x = in.readDouble(); double y = in.readDouble(); Point2D p = new Point2D(x, y); kdtree.insert(p); brute.insert(p); } double x0 = 0.0, y0 = 0.0; // initial endpoint of rectangle double x1 = 0.0, y1 = 0.0; // current location of mouse boolean isDragging = false; // is the user dragging a rectangle // draw the points StdDraw.clear(); StdDraw.setPenColor(StdDraw.BLACK); StdDraw.setPenRadius(.01); brute.draw(); while (true) { StdDraw.show(40); // user starts to drag a rectangle if (StdDraw.mousePressed() && !isDragging) { x0 = StdDraw.mouseX(); y0 = StdDraw.mouseY(); isDragging = true; continue; } // user is dragging a rectangle else if (StdDraw.mousePressed() && isDragging) { x1 = StdDraw.mouseX(); y1 = StdDraw.mouseY(); continue; } // mouse no longer pressed else if (!StdDraw.mousePressed() && isDragging) { isDragging = false; } RectHV rect = new RectHV(Math.min(x0, x1), Math.min(y0, y1), Math.max(x0, x1), Math.max(y0, y1)); // draw the points StdDraw.clear(); StdDraw.setPenColor(StdDraw.BLACK); StdDraw.setPenRadius(.01); brute.draw(); // draw the rectangle StdDraw.setPenColor(StdDraw.BLACK); StdDraw.setPenRadius(); rect.draw(); // draw the range search results for brute-force data structure in // red StdDraw.setPenRadius(.03); StdDraw.setPenColor(StdDraw.RED); for (Point2D p : brute.range(rect)) p.draw(); // draw the range search results for kd-tree in blue StdDraw.setPenRadius(.02); StdDraw.setPenColor(StdDraw.BLUE); for (Point2D p : kdtree.range(rect)) p.draw(); StdDraw.show(40); } }