Rekursive Grafische Patterns

package de.borissov;

/**
 * @author: Sergej Borissov
 * @title:  Rekursive Arts
 * @version:   1.0.0.0
 *
 *
 */


public class Main extends Application {

    private Pane root = new Pane();

    @Override
    public void start(Stage primaryStage) throws Exception {

        primaryStage.setScene(new Scene(createContent()));
        primaryStage.show();
    }

    private Parent createContent() {
        root.setPrefSize(1600,900);

        showText("*", 440, 400, 0, 150);
        return root;
    }

    private  void showText(String message, double x, double y, double angle, double fontSize){
        if(fontSize < 5)
            return;
        Text text = new Text(message);
        text.setTranslateX(x);
         text.setTranslateY(y);
        text.setFont(Font.font(fontSize));
       // text.setRotate(angle);

        root.getChildren().add(text);

   /*     TranslateTransition tt = new TranslateTransition(Duration.seconds(0.4), text);
        tt.setFromX(800);
        tt.setFromY(450);
        tt.setToX(x);
        tt.setToY(y);
  */
        double delay = 1 - fontSize / 150;

     //   tt.setDelay(Duration.seconds(delay * 2.5));
     //   tt.play();

        ScaleTransition st = new ScaleTransition(Duration.seconds(0.4), text);
        st.setFromX(0);
        st.setFromY(0);
        st.setToX(1.0);
        st.setToY(1.0);
        st.setDelay(Duration.seconds(delay * 5.5));
        st.play();





        Point2D vector = new Point2D(Math.cos(angle), Math.sin(angle)).multiply(fontSize * 4.5);

        char c = message.charAt(0);
        //c++;

        showText(String.valueOf(c), x + vector.getX(), y + vector.getY(), angle + 90, fontSize  - 1);
    }

    public static void main(String[] args) {
        launch(args);
    }
}