2D-Grafik AffineTransform - Punkte abfragen nach transform()

Hallo,

ich arbeite gerade an einem Programm, welches ein Kreisdiagramm erstellt.
Für die unterschiedlichen Kreissektoren lasse ich eine Linie immer nach einer bestimmte Gradzahl drehen und dann zeichnen.

Aber wie kann ich jetzt die Points abfragen, wo sich die Linie befindet?

In meinem Code sieht es wie folgt aus:

Die Werte percent, size, g2, p1, p2 sind natürlich alle zugeordnet, etc.

Java:
AffineTransformation at = new AffineTransformation();
at.rotate(Math.toRadians(percent), size, size);
g2.transform(at);
g2.draw(new Line2D.Double(p1, p2));

KSKB kann auf Wunsch geliefert werden.


Vielen Dank schon mal im Voraus!
 

Marco13

Top Contributor
So direkt geht das erstmal nicht. Wenn man die Punkte wirklich braucht, muss man die Endpunkte der Linie wohl einzeln mit at#transform(srcPoint, dstPoint) transformieren.

Wenn es "größere" Objekte wären, könnte man mit at#createTransformedShape(...) ein transformiertes Shape erstellen und sich die Punkte da mit einem PathIterator abholen, aber für eine Linie wäre das ein Krampf...

BTW: Wenn da nicht irgendwo noch ein
g2.setTransform(someTransformThatWasStoredPreviously);
oder
g2.dispose();
steht werden die Drehungen "aufeinandergerechnet", was wohl nicht gewünscht ist...
 
Ah, vielen Dank!
Ich bin grade am Durchprobieren der Methoden und werde mir diese als nächstes vornehmen.

Und doch es ist gewünscht, dass die Drehungen sich aufrechnen. ;)

Edit: Leider hat das nicht wirklich funktioniert.
Ich werde mal einen Umweg probieren und wahrscheinlich auch eigene Methoden programmieren müssen...
 
Zuletzt bearbeitet:

bERt0r

Top Contributor
Das geht schon so nach dem Prinzip, hier ein Beispielkomponent (die StringLabels sind ein bisschen versetzt, die richtig zu berechnen ist glaub ich etwas komplizierter). Die Rotationen werden dabei aufeinander gerechnet, es wird aber für jede ein eigenes transformed Shape erstellt.

Java:
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Point;
import java.awt.Rectangle;
import java.awt.Shape;
import java.awt.geom.AffineTransform;
import java.awt.geom.Line2D;
import java.util.Map;
import java.util.Map.Entry;
import java.util.TreeMap;

import javax.swing.JPanel;


public class KreisDiagrammPanel extends JPanel
{
	Map<String,Integer> sector=new TreeMap<String,Integer>();
	/**
	 * Create the panel.
	 */
	public KreisDiagrammPanel()
	{
		
	}
	
	public void addSector(String name, int weight)
	{
		sector.put(name, weight);
		repaint();
	}
	
	@Override
	public void paintComponent(Graphics graphics)
	{
		Graphics2D g=(Graphics2D)graphics;
		
		Rectangle clipBounds=g.getClipBounds();
		Rectangle bounds=clipBounds;
		if(bounds.height!=bounds.width)
		{
			int min=Math.min(bounds.height, bounds.width);
			bounds=new Rectangle(min,min);
			bounds.translate((clipBounds.width-bounds.width)/2,(clipBounds.height-bounds.height)/2);
		}
		
		Point center=new Point((int)bounds.getCenterX(),(int)bounds.getCenterY());
		Point twelve=new Point((int)bounds.getCenterX(),0);
		
		g.drawOval(bounds.x,bounds.y, bounds.width, bounds.height);
		
		double sum=0;
		for(Integer i:sector.values())
		{
			sum+=i;
		}
		
		
		Line2D.Double line=new Line2D.Double(center, twelve);
		AffineTransform af=new AffineTransform();
		Shape last=line;
		
		for(Entry<String,Integer> entry:sector.entrySet())
		{
			double percent=entry.getValue()/sum;
			double angle=percent*360;
			
			af.rotate(Math.toRadians(angle), center.x, center.y);
			Shape s=af.createTransformedShape(line);
			
			g.draw(s);
			g.drawString(entry.getKey(), (int)s.getBounds().getCenterX(),(int)s.getBounds().getCenterY());
			last=s;
		}	
	}		
}
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
U 2dgraphics unterschied zwischen .scale und AffineTransform.getScaleInstance AWT, Swing, JavaFX & SWT 4
A Swing AffineTransform Verkettung AWT, Swing, JavaFX & SWT 2
FrittenFritze Batik und AffineTransform AWT, Swing, JavaFX & SWT 2
H AWT AffineTransform, Kombination von Translation und Rotation AWT, Swing, JavaFX & SWT 0
T AffineTransform bei Sprites AWT, Swing, JavaFX & SWT 17
T AffineTransform wirkt sich nur auf dem ersten Panel aus AWT, Swing, JavaFX & SWT 3
R AffineTransform (setToScale) AWT, Swing, JavaFX & SWT 3
H String teilen, damit bei JLabel keine Punkte am Ende angezeigt werden AWT, Swing, JavaFX & SWT 4
T Swing Tetraeder - mehrere Punkte verbinden? - Ansätze gesucht AWT, Swing, JavaFX & SWT 2
G JavaFX Projection von 3D Punkte auf 2D Punkte AWT, Swing, JavaFX & SWT 0
Soloeco Graphics2D - Verbinden zweier Punkte AWT, Swing, JavaFX & SWT 6
N jFreeChart einzelne Punkte anwählen und Formatieren AWT, Swing, JavaFX & SWT 0
M Punkte malen AWT, Swing, JavaFX & SWT 1
F 2D-Grafik Punkte um Mittelpunkt drehen AWT, Swing, JavaFX & SWT 11
J Reihenfolge der Punkte in Vielecken AWT, Swing, JavaFX & SWT 3
E 2D-Grafik Div. Punkte zur Sinuskurve verbinden AWT, Swing, JavaFX & SWT 25
B unsortierte Punkte verbinden AWT, Swing, JavaFX & SWT 8
K Punkte eines Funktionsplotters zeitlich versetzt zeichnen AWT, Swing, JavaFX & SWT 18
K swing/awt Panel punkte malen AWT, Swing, JavaFX & SWT 4
P Welche Methode um Punkte in xy Ebene zu zeichnen? AWT, Swing, JavaFX & SWT 4
L Punkte verbinden AWT, Swing, JavaFX & SWT 3
W Punkte im JLabel AWT, Swing, JavaFX & SWT 7
H Punkte im Kreis AWT, Swing, JavaFX & SWT 3
E Mysthische Punkte auf JFrame(FlowLayout) nach Komboboxklick AWT, Swing, JavaFX & SWT 5
K Punkte in eine bestimmte Richtung bewegen AWT, Swing, JavaFX & SWT 5
M gezeichnete Punkte dynamisch verschieben mit mousedragged AWT, Swing, JavaFX & SWT 4
H Punkte auf einem JPanel zeichnen AWT, Swing, JavaFX & SWT 4
V Punkte malen im Panel AWT, Swing, JavaFX & SWT 3
G Punkte auf Canvas zeichnen AWT, Swing, JavaFX & SWT 2
R JComboBox abfragen AWT, Swing, JavaFX & SWT 1
K Swing Buttons erst blinken lassen und dann abfragen, ob sie gedrückt worden sind AWT, Swing, JavaFX & SWT 2
S Labels abfragen AWT, Swing, JavaFX & SWT 6
karlmasutra Java FX Checkbox abfragen AWT, Swing, JavaFX & SWT 2
G Tastatur abfragen AWT, Swing, JavaFX & SWT 0
V RadioButton aktivieren/deaktivieren; Zustand abfragen und wechseln AWT, Swing, JavaFX & SWT 2
E 3D-Grafik LWJGl OpenGL Version vor Erstellung des Displays abfragen AWT, Swing, JavaFX & SWT 2
E Zustand der JCheckBox abfragen AWT, Swing, JavaFX & SWT 1
M TextArea über mehrere Zeilen - wie Zeileanzahl abfragen? AWT, Swing, JavaFX & SWT 5
M Mausposition auf JPanel abfragen und umrechnen AWT, Swing, JavaFX & SWT 9
O Jcheckbox Status nachträglich abfragen AWT, Swing, JavaFX & SWT 2
jueki Aktuell eingestellten Filter aus einem JFileChooser abfragen. AWT, Swing, JavaFX & SWT 5
A SWT Combo - wie Tastaureingabe abfragen AWT, Swing, JavaFX & SWT 3
M Checkboxen Namen setzten über Parameter => Abfragen? AWT, Swing, JavaFX & SWT 2
Psypsy Swing Abfragen ob ein Fenster verdeckt ist AWT, Swing, JavaFX & SWT 5
G Auf Canvas zeichnen nur über boolean-Abfragen? AWT, Swing, JavaFX & SWT 5
R Swing Abfragen, ob ein jButton gedrückt _IST_ AWT, Swing, JavaFX & SWT 6
C JFrame nach JPanel abfragen AWT, Swing, JavaFX & SWT 6
L Swing MousePosition in einem JPanel abfragen AWT, Swing, JavaFX & SWT 4
D Swing Tabellen-Namen im ListSelectionListener abfragen AWT, Swing, JavaFX & SWT 2
G Bildeigenschaften abfragen (Metadaten) AWT, Swing, JavaFX & SWT 7
T Swing JCheckBox: Wie getState() abfragen? AWT, Swing, JavaFX & SWT 2
X RGB abfragen von Image auf JFrame AWT, Swing, JavaFX & SWT 10
C Abfragen welcher Tab aktiv ist? AWT, Swing, JavaFX & SWT 2
G Großbuchstaben abfragen mit Keycode Methoden AWT, Swing, JavaFX & SWT 5
R Methode der Class im JComboBox abfragen AWT, Swing, JavaFX & SWT 2
Daniel_L Nachrichten/Event aus nicht-modalen Dialogen abfragen? AWT, Swing, JavaFX & SWT 4
G Abfragen, wann JFrame dargestellt ist AWT, Swing, JavaFX & SWT 3
H JProgressBar in TableColumn von JTable setzen/abfragen AWT, Swing, JavaFX & SWT 5
G Namen mehrer Checkboxen abfragen AWT, Swing, JavaFX & SWT 7
D Mit Java Postfach abfragen AWT, Swing, JavaFX & SWT 3
P Breite und Höhe des contentPane abfragen AWT, Swing, JavaFX & SWT 3
A Header abfragen, überprüfen AWT, Swing, JavaFX & SWT 23
F Checkboxen in JTable abfragen AWT, Swing, JavaFX & SWT 2
T (WACOM) Grafik Tablet abfragen AWT, Swing, JavaFX & SWT 3
O Abfragen beim öffnen oder danach ausführen? AWT, Swing, JavaFX & SWT 4
A JCheckBox abfragen AWT, Swing, JavaFX & SWT 6
G jComboBox abfragen? AWT, Swing, JavaFX & SWT 2
G Sicherheitseinstellungen für Verzeichnis abfragen WIN 2000 AWT, Swing, JavaFX & SWT 2
U JTable Position der Spalte abfragen AWT, Swing, JavaFX & SWT 7
R Zentral Veränderungen auf einer Maske/Formular abfragen AWT, Swing, JavaFX & SWT 6
T JRadioButton abfragen AWT, Swing, JavaFX & SWT 1
G wie abfragen wer event ausgelöst hat? AWT, Swing, JavaFX & SWT 2
S Alle EventListener einer JComponent abfragen? AWT, Swing, JavaFX & SWT 3
F Wie bestimmte Obj. einer ContentPane abfragen und vergl? AWT, Swing, JavaFX & SWT 11
F Status von RadioButtons abfragen AWT, Swing, JavaFX & SWT 5
$ Layoutabhängige größe von JLabel für Icon abfragen AWT, Swing, JavaFX & SWT 2
G Bildpixel ansprechen und Farbwerte abfragen AWT, Swing, JavaFX & SWT 4
I Globale Tastatur-Events abfragen AWT, Swing, JavaFX & SWT 3
M JButton in JComponent abfragen AWT, Swing, JavaFX & SWT 6
V sellectAll() - Zustand abfragen AWT, Swing, JavaFX & SWT 8
D Farbe einer Grafik über den Cursor abfragen AWT, Swing, JavaFX & SWT 6
A instanceof einer JComboBox abfragen AWT, Swing, JavaFX & SWT 4
H Abfragen des Betriebssystems AWT, Swing, JavaFX & SWT 3
M Look and Feels dynamisch abfragen AWT, Swing, JavaFX & SWT 13
W JTextfield aktualisieren / Wert aus Datenbank neu abfragen AWT, Swing, JavaFX & SWT 2
L Inhalt von ausgewählte Spalten aus JTable abfragen AWT, Swing, JavaFX & SWT 4
C JList Inhalte abfragen AWT, Swing, JavaFX & SWT 2
P Tastendrücke abfragen AWT, Swing, JavaFX & SWT 3
H Mausereigniss abfragen AWT, Swing, JavaFX & SWT 2
A showConfirmDialog (Rückgabewert abfragen?) AWT, Swing, JavaFX & SWT 3
G JTextPane: Eigenschaften des selektierten Bereichs abfragen AWT, Swing, JavaFX & SWT 2
D Tastendruck abfragen AWT, Swing, JavaFX & SWT 16
O Display Env. Variable unter (X11) von ClientApp. abfragen AWT, Swing, JavaFX & SWT 2
M Abfragen von Buttons in einem Panel einer anderen Klasse AWT, Swing, JavaFX & SWT 4
T Pixel nach Farbwert abfragen AWT, Swing, JavaFX & SWT 2

Ähnliche Java Themen

Neue Themen


Oben