Obrót lini względem poprzedniej

0

Witam!
W tym roku zacząłem naukę programowania w Java. Na studiach mam zadany projekt w postaci programu. Musze napisać program, który będzie generował "drzewka" używając sposóbu L-System. Dla pokazania o co chodzi wstawię filmik .
Mam już wykonany generator, który wygeneruje mi alfabet do rysowania danego drzewka, jednak podczas rysowania potrzebne jest narysowanie kolejnej lini obróconej o zadany kąt w lewo lub w prawo. Generalnie chodzi o to, żeby zacząć rysowanie lini od końcowego punktu ostatniej lini, jednak obrócić ją o dany kąt względem wcześniejszej. Czy jest może jakaś metoda która rysowała by linię od dołu w górę, jednak jeśli podany byłby kąt to narysowała by go obróconego o ten kąt?
Mam nadziej, że nie przekombinowałem w tłumaczeniu swojego problemu... Jestem całkiem zielony z rysowania w tym języku więc z góry przepraszam jeśli pytam o głupoty i proszę o pomoc i zrozumienie.
Z góry bardzo dziękuję za każdą pomoc i pozdrawiam serdecznie!

1

Zapoznaj się z metodami rotate, scale, translate i transform klasy Graphics2D https://docs.oracle.com/javase/8/docs/api/java/awt/Graphics2D.html

1

Mi się wydaje że musisz tu operować na Math.sin() Math.cos() i tak renderować na podstawie punktu początkowego i końcowego.
Tutaj jakiś przykład : http://stackoverflow.com/questions/3536428/draw-a-line-at-a-specific-angle-in-java/3536455#3536455

1

Fragment kodu rysującego flagę Grenady (ma siedem identycznych gwiazdek i gałkę muszkatołową).
Grenada.png
Kod jednej gwiazdki

            g2.setColor(new Color(255,204,0)); //pomarańczowy
            int x[] = new int[10];
            int y[] = new int[10];
            for(int i=0;i<5;i++)
            {
                double angle = i*72 - 90.0;
                x[2*i] = (int)(48*Math.cos(Math.toRadians(angle)));
                y[2*i] = (int)(48*Math.sin(Math.toRadians(angle)));
                angle+=36.0;
                x[2*i+1] = (int)(18*Math.cos(Math.toRadians(angle)));
                y[2*i+1] = (int)(18*Math.sin(Math.toRadians(angle)));                
            }

a potem siedem razy

            g2.translate(....);
            g2.fillPolygon(x,y,10);

Obrócona gałka

            GeneralPath path = new GeneralPath();
            path.moveTo(200.0,300.0);
            path.quadTo(230.0,270.0,260.0,300.0);
            path.quadTo(230.0,330.0,200.0,300.0);
            g2.rotate(45.0,200.0,300.0);
            g2.setColor(Color.RED);
            g2.fill(path);
            path = new GeneralPath();
            path.moveTo(160.0,300.0);
            path.quadTo(230.0,240.0,300.0,280.0);
            path.quadTo(250.0,270.0,200.0,300.0);
            path.quadTo(250.0,330.0,300.0,320.0);
            path.quadTo(230.0,360.0,160.0,300.0);
            g2.setColor(new Color(255,204,0)); //pomarańczowy
            g2.fill(path);
            g2.rotate(-45.0,200.0,300.0);

1 użytkowników online, w tym zalogowanych: 0, gości: 1