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!
0

- 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

- 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

- Rejestracja:prawie 17 lat
- Ostatnio:prawie 5 lat
1
Fragment kodu rysującego flagę Grenady (ma siedem identycznych gwiazdek i gałkę muszkatołową).
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);
- Grenada.png (14 KB) - ściągnięć: 114