2D-Grafik Tutorial für ein einfaches Zeichenprogramm!

tirolerbubble

Neues Mitglied
Hallo liebe Forum Leser,

Ich bin schon ziemlich lange und ziemlich intensiv auf der Suche nach einem speziellen Zeichenprogramm in java. Ich habe mich selber damit gespielt, aber ich stehe bei einigen Themen an!

Ich erklärs mal: Der User hat verschiedene Buttons zur Auswahl (Linie links, Kurve rechts, usw.)
Bei Auswahl eines Buttons öffnet sich ein JDialog für die Werte Eingabe, und bei bestätigen der Werte wirds auch prompt gezeichnet!
siehe Bild
attachment.php


Die Linien oder Kurven sollten immer an das vorhergehende Element angfügt werden!
Das grüne Fadenkreuz kennzeichnet immer die letzte Position der Bahn.

Wie Ihr auf dem Bild erkennen könnt hab ich die meisten Probleme mit den Kurven.
1.: Sie werden nicht vollständig gezeichnet. (drawArc ist hier der richtige Befehl)?
2.: Nur 90 Grad Kurven möglich. Wenn ich 60 Grad eingebe wird die Kurve gezeichnet aber das Fadenkreuz verliert die letzte Position. (Bin zu dumm um zu rechnen)

Ich habe leider meinen Quellcode auf nen anderem Rechner, somit kann ich keine Codeausschnitte einfügen.

Vl. hat jemand sowos schon mal gemacht, würde mein Retter sein!
Ich bin für jede Antwort dankbar!

Lg
 
Zuletzt bearbeitet:
2.: Nur 90 Grad Kurven möglich. Wenn ich 60 Grad eingebe wird die Kurve gezeichnet aber das Fadenkreuz verliert die letzte Position. (Bin zu dumm um zu rechnen)
Das hoffe ich mal nicht, dass du zu dumm bist, aber ich würde an deiner Stelle mal den alten Mathehefter aus der Ecke holen und bei Sinus, Kosinus und allen voran Tangens schauen!


Generelles Vorgehen:

Idee
Du bist in einem Punkt P1( x|y ) und willst nun mit einer Strecke S unter dem Winkel 60° deinen neuen Punkt P2( x'|y' ) berechnen. Des weiteren sei angenommen deine Strecke knicke nach oben ab.

Durchführung
Code:
sin(60°)   *   Hypothenuse = Gegenkathete
cos(60°)   *   Hypothenuse = Ankathete

P2( x'|y' ) = P1 ( x + Ankathete | y + Gegenkathete )


So ich hoffe du kannst jetzt erstmal ein wenig weitermachen. Am besten probierst du obige Rechnung mal einfach an ein paar Beispielen aus; auf nem karierten Blatt Papier mit Lineal, Bleistift, .... also total analog 🙂 Ich hoffe ich hab mich nicht vertan.

Viele Grüße
earlgrey_tea
 
So ich hab dir das ganze mal in Quelltext übersetzt:

Java:
package drawArc;

import java.awt.BorderLayout;

public class DrawArcExample extends JFrame {

	private JPanel contentPane;

	/**
	 * Launch the application.
	 */
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					DrawArcExample frame = new DrawArcExample();
					frame.setVisible(true);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

	/**
	 * Create the frame.
	 */
	public DrawArcExample() {
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setBounds(100, 100, 450, 300);
		contentPane = new JPanel();
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		contentPane.setLayout(new BorderLayout(0, 0));
		setContentPane(contentPane);

	}

	@Override
	public void paint(Graphics g)
	{
		int line = 60;
		int angle = 0;
		int seite = 160;  
		int radius  = seite / 2; 
		int obereEckeX = 100; 
		int obereEckeY = 80; 
		
		int mittelpunktX = obereEckeX + radius; 
		int mittelpunktY = obereEckeY + radius; 
		
		double sinus = Math.sin(Math.toRadians(line));
		double gegenKathete = (sinus * radius * -1);
		
		double cosinus = Math.cos(Math.toRadians(line)); 
		double anKathete = (cosinus * radius );
		
		int endPunktWinkelX = (int) (mittelpunktX + anKathete); 
		int endPunktWinkelY = (int) (mittelpunktY + gegenKathete); 
		
		g.drawArc(obereEckeX, obereEckeY, seite, seite, angle, line);
		g.drawLine(mittelpunktX, mittelpunktY, endPunktWinkelX, endPunktWinkelY);
		g.drawLine(mittelpunktX, mittelpunktY, mittelpunktX + radius, mittelpunktY);

	}
}

Ansonsten:
  • Ja,
    Code:
    drawArc()
    ist genau deine Methode🙂
  • Du musst bei Java immer ein wenig aufpassen was solche Winkelsachen und Kreisgebilde angeht; Kreise werden in Java durch das sie umgebende Rechteck definiert, nicht durch den Radius!

Wär schön, wenn du deinen Quelltext posten könntest, dann könnte man dir vielleicht noch gezielter helfen. Auf tutorials.de hast du's ja auch geschafft.

Viele Grüße
earlgrey_tea
 

Zurück
Oben