Obrót lini względem poprzedniej

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!

bogdans
Moderator
  • Rejestracja:prawie 17 lat
  • Ostatnio:prawie 5 lat
1

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


To smutne, że głupcy są tak pewni siebie, a ludzie mądrzy - tak pełni wątpliwości. Bertrand Russell
Kandif
  • Rejestracja:ponad 12 lat
  • Ostatnio:ponad 4 lata
  • Postów:231
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


"-._,-'"-.,-'"-._,-'"-.,-'"-._,-'"-.,-'"-._,-'"-.,-'"-._,-'"-.,-'"-._,-'"-.,-'"-._,-'"-.,-'"-._,-'"-.,-'
edytowany 1x, ostatnio: Kandif
bogdans
Chyba się mylisz, prościej jest przesuwać początek układu i obracać osie. A najwygodniej to łączyć jedno i drugie.
Kandif
Może prościej, kto wie XD. Mam tendencje do robienia wszystkiego dłuższą drogą. :P
bogdans
Moderator
  • Rejestracja:prawie 17 lat
  • Ostatnio:prawie 5 lat
1

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

Kopiuj
            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

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

Obrócona gałka

Kopiuj
            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);

To smutne, że głupcy są tak pewni siebie, a ludzie mądrzy - tak pełni wątpliwości. Bertrand Russell

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.