Polygone umdrehen

_START

Mitglied
Ich habe einen Tannenbaum (mehrere Dreiecke untereinander) erstellt und will diesen nun umdrehen, also so das mein Baum auf den Boden, auf der Seite liegt.

Ich habe von Java2D gehört und von AffineTransformation aber ich finde das nicht ganz klar erklärt.

Ich habe:
Java:
      //						   X,  Y,   W,    H,   C,  Sn,   JWL
		XmasTree b1 = new XmasTree(35, 60, 150, 250, var1, true, 3);
		XmasTree b2 = new XmasTree(180, 30, 340, 250, var2, false, 3); 
		XmasTree b3 = new XmasTree(350, 30, 500, 260, var3, false, 3); 
		XmasTree b4 = new XmasTree(550, 60, 700, 250, var4, false, 3);
		XmasTree b5 = new XmasTree(750, 30, 850, 270, var5, false, 3);

X= posX, Y=posY, W=width, H=height, C=Color, Sn=SnowCovered, JWL=Jewellery.

Die ganze Geschichte wird so gezeichnet:

Java:
for (double xind0 = treerray[z].posx, xind1 = ((treerray[z].width+treerray[z].posx)/2), xind2 = treerray[z].width, 
					    yind0 = (treerray[z].posy*0.01)*267, yind1 = treerray[z].posy, yind2 = (treerray[z].posy*0.01)*267;
						yind0<=treerray[z].height; 
						yind0+=10, yind1+=10, yind2+=10) //Wiederholungsrate
						{
					
						int xpos[] = {(int) xind0, (int) xind1, (int) xind2};
						int ypos[] = {(int) yind0, (int) yind1, (int) yind2};
				
						
						
						if(treerray[z].snowCovered == true)
						{
							Color snow = Color.WHITE;
							g.setColor(snow);
							g.fillPolygon(xpos, ypos, 3);
						} 
						else{

							g.setColor(treerray[z].color);
							g.fillPolygon(xpos, ypos, 3);
							
						}

Und jetzt kommt die Frage:
Wo soll ich denn Java 2D einsetzen, um meinen Baum zu rotieren?
 

Marco13

Top Contributor
Um die Frage zu beantworten, wie man ihn rotiert, müßtest du mehr Code posten. Rotiert zeichnen kann man ihn mit sowas wie
Graphcis2D g2d = (Graphics2D)g;
Graphics2D temp = (Graphics2D)g2d.createGraphics();
temp.rotate(...);
temp.draw(...);
temp.dispose();
oder auf 1000 anderen Wegen...
 

Michael...

Top Contributor
Ich habe einen Tannenbaum (mehrere Dreiecke untereinander) erstellt und will diesen nun umdrehen, also so das mein Baum auf den Boden, auf der Seite liegt.

Graphics2D bietet eine Methode um das Graphics Objekt um einen Punkt und Winkel zu rotieren (siehe rotate(double, double, double)) und somit den Baum in einem beliebigen Winkel zu zeichnen.
Hinweis: das in der paintComponent übergebene Graphics Objekt ist ein Graphics2D Objekt.
 

_START

Mitglied
Java:
if(treerray[z].dropped == true)
				{
					Graphics2D g2d = (Graphics2D) g;
					g2d.rotate(100);
						
				}

Ist jetzt dazugekommen, aber dann werden alle g-Objekte rotiert. Ich will aber nur, dass ein Baum mit seinen Dreiecken betroffen ist.
 

Michael...

Top Contributor
Dann kannst Du zum Zeichnen des Baumes entweder ein eigenes Graphics Object s. Graphics#create() verwenden dieses rotieren und nach dem Zeichnen wieder verwerfen. Oder Du rotierst das ursprüngliche Graphics nach dem zeichnen des Baumes wieder zurück.
 

Andi_CH

Top Contributor
Geht doch noch viel einfacher - einfach die Koordinaten umrechnen.
Ich würde mal vermuten dass affine transformation in jeglicher Hinsicht (Einarbeitszeit, Codierzeit, Laufzeit) aufwendiger ist, als selbst kurz die Punkte an einer Achse spiegeln.
 

_START

Mitglied
@Andi, ich habe es schon mehrmals umgerechnet aber es nicht funkioniert, entweder hat es
nichts geändert (however) oder der Applet-Viewer fängt an zu hängen.

@Michael, kannst du das etwas genauer erklären?
 

Michael...

Top Contributor
Prinzipiell hat Marco es ja bereits aufgezeigt. Allerdings ein kleiner Fehler hat sich eingeschlichen:
createGraphics() muss create() heißen. Mit dem temp kann man dann den Baum zeichnen mit g2d oder g den Rest.
 

_START

Mitglied
Die Tipps an sich sind ja nett, aber wie soll ich diese nutzen wenn mir hier irgendwelche creates und temps an den Kopf geworfen werden.
Ich weiß doch garnicht wo ich diese einbinden soll.
 

Michael...

Top Contributor
Ich weiß doch garnicht wo ich diese einbinden soll.
Da wo Du bisher auch zeichnest.
Java:
	public void paintComponent(Graphics g) {
		super.paintComponent(g);
		//Erzeuge ein neues Graphics Objekt auf Basis des alten
		Graphics2D g2 = (Graphics2D)g.create();
		//Rotiere das neue Object um 45 Grad um Punkt 10,10
		g2.rotate(Math.toRadians(45), 10, 10);
		//Zeichne eine Linie mit der Länge 100 in x-Richtung
		g2.drawLine(10, 10, 110, 10);
		//Gib das neu erzeugte Graphics Objekt wieder frei
		g2.dispose();
		//Zeichne mit dem ursprünglichen Graphics Objekt eine Linie mit der Länge 100 in x-Richtung
		g.drawLine(10, 10, 110, 10);
	}
 

_START

Mitglied
Das Problem ist, dass bei der Java2D-Funktion alle gezeichneten Polygone gedreht werden, ich will aber nur das ein Polygon gedreht wird.
 

Michael...

Top Contributor
Das Problem ist, dass bei der Java2D-Funktion alle gezeichneten Polygone gedreht werden
Nein, nur die mit dem manipulierten Graphics Objekt
Code:
g2
werden gedreht. Wenn man alle mit dem manipulierten Objekt
Code:
g2
zeichnet, sind logischerweise auch alle gedreht. Die Objekte die "nichtrotiert" dargestellt werden sollen muss man mit dem ursprünglichen Graphics Objekt
Code:
g

In meinem Bsp wird die Linie (selbe Koordinaten und Ausrichtung) ja auch einmal "gerade" und einmal rotiert gezeichnet.
 

_START

Mitglied
Bei
Java:
Graphics2D g2 = (Graphics2D)g.create();
					g2.rotate(Math.toRadians(45), treerray[z].posx, treerray[z].posy);
tut sich nichts.
 

_START

Mitglied
@Marco, dieser Tipp war ausschlaggebend!

Jetzt habe ich das Problem, dass meine Polygone zu weit links sind.
Auch transform von AffineTransform bewegt meine Polygone nicht dahin wo ich will.
 

Marco13

Top Contributor
Tja, das 'transform' "bewegt" die Polygone nicht dahin, wo du willst, sonst würde sie auch [c]transformWhereIWantThem[/c] heißen. Sie "bewegt" sie so, wie es sich aus den übergebenen Parametern und den schon durchgefühten Transformationen ergibt. (Mehr kann man dazu im Moment nicht sagen - du wirst das wohl oder übel nachvollziehen müssen :bahnhof: )
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
F 2 Polygone verbinden Java Basics - Anfänger-Themen 4
L polygone nacheinander zeichnen Java Basics - Anfänger-Themen 5
E Reihenfolge der Werte umdrehen (mittels statischem int-Array Java Basics - Anfänger-Themen 3
Konsii25 Reihen in Java umdrehen Java Basics - Anfänger-Themen 4
B Texte umdrehen Java Basics - Anfänger-Themen 4
T String umdrehen Java Basics - Anfänger-Themen 2
M Array Reihenfolge umdrehen Java Basics - Anfänger-Themen 9
Z Variablen String umdrehen, Variable wird nicht gefunden Java Basics - Anfänger-Themen 6
E Zahl umdrehen? Java Basics - Anfänger-Themen 21
S Rekursives Umdrehen, Spiegeln. etc. von Strings Java Basics - Anfänger-Themen 3
E Zeichenreihenfolge umdrehen Java Basics - Anfänger-Themen 12
1 den Inhalt eines Arrays umdrehen Java Basics - Anfänger-Themen 11
J Array umdrehen Java Basics - Anfänger-Themen 7
J Binärcode - Text umdrehen? Java Basics - Anfänger-Themen 3
T Elemente im Array umdrehen Java Basics - Anfänger-Themen 9
T Ein Feld umdrehen Java Basics - Anfänger-Themen 5
Z Array umdrehen Java Basics - Anfänger-Themen 12
Y Raute umdrehen Java Basics - Anfänger-Themen 10
J Array umdrehen Java Basics - Anfänger-Themen 3
S Array bei index halbe umdrehen ohne hilfsfeld Java Basics - Anfänger-Themen 13
StrikeTom String umdrehen Java Basics - Anfänger-Themen 4
K Alle noch nicht umgedrehte Karten umdrehen ? Java Basics - Anfänger-Themen 2
J integer vorzeichen umdrehen? Java Basics - Anfänger-Themen 2
Y Vorzeichen umdrehen Java Basics - Anfänger-Themen 13
G rekursiv zahl umdrehen Java Basics - Anfänger-Themen 5
G Dezimalzahl(integer) ziffernweise umdrehen Java Basics - Anfänger-Themen 3
G Ausgabewert umdrehen Java Basics - Anfänger-Themen 3
E ZahlenArray umdrehen Java Basics - Anfänger-Themen 14

Ähnliche Java Themen


Oben