public static void main(String[] args) { int n = 10; StdDraw.setCanvasSize(160, 640); StdDraw.setXscale(-1, n + 1); StdDraw.setPenRadius(0.006); double[] a = new double[n]; for (int i = 0; i < n; i++) a[i] = StdRandom.uniform(0.0, 1.0); sort(a); }
private void drawNode(KdNode nd, int turn, double xmin, double ymin, double xmax, double ymax) { if (nd == null) return; StdDraw.setPenRadius(0.02); if (turn == 0) { StdDraw.setPenColor(StdDraw.RED); StdDraw.line(nd.point.x(), ymin, nd.point.x(), ymax); drawNode(nd.left, 1 - turn, xmin, ymin, nd.point.x(), ymax); drawNode(nd.right, 1 - turn, nd.point.x(), ymin, xmax, ymax); } else { StdDraw.setPenColor(StdDraw.BLUE); StdDraw.line(xmin, nd.point.y(), xmax, nd.point.y()); drawNode(nd.left, 1 - turn, xmin, ymin, xmax, nd.point.y()); drawNode(nd.right, 1 - turn, xmin, nd.point.y(), xmax, ymax); } StdDraw.setPenColor(StdDraw.BLACK); StdDraw.setPenRadius(0.2); nd.point.draw(); }
public static void drawRandConn(int N, double p) { StdDraw.setCanvasSize(512, 512); StdDraw.setScale(-1.0, 1.0); StdDraw.setPenRadius(.025); double[][] d = new double[N][2]; for (int i = 0; i < N; i++) { d[i][0] = Math.cos(2 * Math.PI * i / N); d[i][1] = Math.sin(2 * Math.PI * i / N); StdDraw.point(d[i][0], d[i][1]); } StdDraw.setPenRadius(); StdDraw.setPenColor(StdDraw.GRAY); for (int i = 0; i < N - 1; i++) for (int j = i + 1; j < N; j++) if (StdRandom.bernoulli(p)) StdDraw.line(d[i][0], d[i][1], d[j][0], d[j][1]); }
private void draw(Node x, Orientation orientation) { if (x == null) { return; } StdDraw.setPenColor(StdDraw.BLACK); StdDraw.setPenRadius(0.01); x.p.draw(); if (orientation == Orientation.LR) { StdDraw.setPenColor(StdDraw.RED); StdDraw.setPenRadius(0.001); StdDraw.line(x.p.x(), x.rect.ymin(), x.p.x(), x.rect.ymax()); } else { StdDraw.setPenColor(StdDraw.BLUE); StdDraw.setPenRadius(0.001); StdDraw.line(x.rect.xmin(), x.p.y(), x.rect.xmax(), x.p.y()); } Orientation next = orientation.next(); draw(x.lb, next); draw(x.rt, next); }
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); } }