@Override public void start(Stage stage) throws Exception { Point[] sample = new Point[] { new Point(20, 10), new Point(50, 50), new Point(10, 20), new Point(100, 30), new Point(100, 200), new Point(30, 30), }; ArrayList<Point> result = convexHull(sample); System.out.println("Left with: " + result.toString()); // for animated spawning of dots Circle[] sampleDots = new Circle[sample.length]; for (int i = 0; i < sampleDots.length; i++) { sampleDots[i] = new Circle(sample[i].x, sample[i].y, 3); sampleDots[i].setFill(Color.RED); sampleDots[i].opacityProperty().set(0); if (result.contains(sample[i])) sampleDots[i].setFill(Color.DARKCYAN); bp.getChildren().add(sampleDots[i]); sampleDots[i].toFront(); } // polygon of result Polygon p = new Polygon(); p.setFill(Color.TRANSPARENT); p.setStroke(Color.BLACK); p.setStrokeWidth(3); for (Point pt : result) { p.getPoints().addAll(Double.valueOf(pt.x), Double.valueOf(pt.y)); } bp.getChildren().add(p); // scene & stage related Scene scene = new Scene(bp, 250, 250); stage.setScene(scene); stage.setResizable(false); stage.setTitle("Sample Convex Hull"); stage.show(); // animated spawning of dots p.toBack(); Timeline tl = new Timeline(); for (int i = 0; i < sampleDots.length; i++) { tl.getKeyFrames() .add( new KeyFrame( Duration.seconds(1), new KeyValue(sampleDots[i].opacityProperty(), 1.0))); } tl.setCycleCount(1); tl.play(); }