dynamisches Koordinatenkreuz mit scalierung

tanzverfuehrung

Bekanntes Mitglied
ich programmiere mir grad einen Funktionsplotter... er zeichnet mir schon die funktin und alles....habe doch bis jetzt nur das Korordinatenkreuz selbst hart gecodet....reingehackt!
somit war es nicht wirklich genau und auch der code natürlich nicht schön. Ich versuche nun mein Koordinatenkreuz schön dynamisch zu machen. Die Achsen ahbe ich auch soweit hinbekommen, habe einfach aus den Achsen auch eine lineare Funktion gemacht
Java:
/** Zeichnet das Koordinatenkreuz */
	private void drawCross() {
		canvas.addPaintListener(new PaintListener() {

			public void paintControl(PaintEvent event) {
				drawFunction("0");
				drawFunction("10000*x");
			}
		});
	}
das funktioniert auch super.alles ist perfect berechnet und gemalt worden....
nun will ich die beschriftung der Achsen auch noch hinbekommen.x Achse hat auch geklappt....aber irgendwie will die y-Achse nciht!Verstehe aber nicht wieso weil ich genau den gleich algorithmus verwende!
kann mir jemand helfen????:L

Java:
/** Zeichnet die Scala des Koordinatenkreuz */
	private void drawScala() {
		canvas.addPaintListener(new PaintListener() {

			public void paintControl(PaintEvent event) {
				// einteilung
				MathEngine mathEngine = new MathEngine();
				//funktion der x-Achse
				IFunction x_f =mathEngine.eval("0");
				//funktion der y-Achse
				IFunction y_f = mathEngine.eval("1000*x");
				KoordinatenUmrechnerX umrechnerX = new KoordinatenUmrechnerX(event.width,  -10, 10);
				KoordinatenUmrechnerY umrechnerY = new KoordinatenUmrechnerY(event.height, 10,  -10);
				
				//X-Koordinatenachse
				
				// im Koordinatensystem gibt es 500 Pixel
				for (int x = -10; x <= 10; x++) {
					// berechnet für das x das y
					double y = x_f.f(x);
					// berechnet X-Pixel für die bestimmte Funktion
					int px = (int) umrechnerX.f(x);
					// berechnet Y-Pixel für die bestimmte Funktion
					int py = (int) umrechnerY.f(y);

					event.gc.drawLine(px, py-5, px, py+5);
					event.gc.drawString(String.valueOf(x), px, py);
				}
				
//				//Y-Koordinatenachse
				
				// im Koordinatensystem gibt es 500 Pixel
				for (int x = 10; x >= -10; x--) {
					// berechnet für das x das y
					double y = y_f.f(x);
					// berechnet X-Pixel für die bestimmte Funktion
					int px = (int) umrechnerX.f(x);
					// berechnet Y-Pixel für die bestimmte Funktion
					int py = (int) umrechnerY.f(y);

					event.gc.drawLine(px-5, py, px+5, py);
					event.gc.drawString(String.valueOf(x), px, py);
				}

			}
		});
	}

;(
 
Zuletzt bearbeitet:

tanzverfuehrung

Bekanntes Mitglied
Java:
//				//Y-Koordinatenachse
				
				// im Koordinatensystem gibt es 500 Pixel
				for (int y = 10; y >= -10; y--) {
					// berechnet für das x das y
					double x = 0;
					// berechnet X-Pixel für die bestimmte Funktion
					int px = (int) umrechnerX.f(x);
					// berechnet Y-Pixel für die bestimmte Funktion
					int py = (int) umrechnerY.f(y);

					event.gc.drawLine(px-5, py, px+5, py);
					event.gc.drawString(String.valueOf(y), px, py-2);
				}


so wirds gemacht, habe jetzt nochmal logisch drüber nachgedacht und todaaaa....ich habs:D:lol:
 

tanzverfuehrung

Bekanntes Mitglied
Ich habe alles auf ein Canvas gezeichnet(koordinatenkreuz, scalierung und funktion)....nun will ich aber immer nur ein ausschnitt sehen könnnen vom canvas.wenn ich mit gedrückter maus hin und her gehe , folgt mir das bild!und rein- und raus zoomen will ich auch noch können!
Ich habe jetzt schon eine Menge gegooglt aber noch nicht das richtige gefunden....
also muss ich das alles über Listener machen oder gibt es da auch schon was fertiges, so wie bei vielen beispielen .... gc.clip() oder setChlip();...oder kann ich das schon beim inizialierung von canvas irgendwie einstellen???

beispiel für funktionsplotter:
Funktionsgraphen plotten - Der Funktionsplotter


wäre nett wenn mir jemand helfen könnte!:toll:
 

Marco13

Top Contributor
Da müssen doch "nur" die Parameter vom "Umrechner" verändert werden? Wüßte nicht, was man mit setClip da machen sollte: Man zeichnet ja schon immer den ganzen Canvas, aber immer nur einen anderen Ausschnitt der "Welt"...
 

tanzverfuehrung

Bekanntes Mitglied
ich habe das nun mit canvas.setBounds(0, 0, 500, 500); gemacht und das funktioniert soweit auch:toll::toll::toll::toll::toll:

jetzt müsste ich halt noch hinbekommen,das ich es verschieben kann, den "BIldausschnitt" des Canvas...!?!
dazu muss ich sicherlich ein Listener setzten oder????:shock::bahnhof:
 

tanzverfuehrung

Bekanntes Mitglied
ich habe das nun mit canvas.setBounds(0, 0, 500, 500); gemacht und das funktioniert soweit auch:toll::toll::toll::toll::toll:

jetzt müsste ich halt noch hinbekommen,das ich es verschieben kann, den "BIldausschnitt" des Canvas...!?!
dazu muss ich sicherlich ein Listener setzten oder????:shock::bahnhof:

???:L
Also ich habe ein Canvas, worauf ein Koordinatenkreuz gezeichnet wird, es wird aber immer nur ein Ausschnitt des Canvas gezeigt auf meiner Anwedungsoberfläche!
Ich müsste jetzt das MouseDOwn Event nutzen!oder?
Also das wenn ich die Maus gedrückt halte und bewege, sich das Bild immer mit bewegt!!
Wie kann ich das realisieren??
ich habe es jetzt mal ausprobiert, jedoch wird mir das ganze canvas auf der shell verschoben und nicht der "bildausschnitt" des Canvas!
ich weiß auch das es an der funktion
Java:
canvas.setLocation(xDiff, yDiff);
liegt, jedoch weiß ich nicht welche funkton ich dafür nutzen muss, um in canvas den ausschnitt zu verschieben!

Java:
	public void guiErstellt() {
		shell.setText("Funktions Plotter");
		shell.setSize(900, 600);
		// Canvas erzeugen und auf shell setzten
		canvas = new Canvas(shell, SWT.BORDER | SWT.MouseDown | SWT.DragDetect | SWT.DRAG);
		canvas.setSize(5000, 5000);
		// Weisse Systemfarbe holen
		Color white = canvas.getDisplay().getSystemColor(SWT.COLOR_WHITE);
		canvas.setBackground(white);
		canvas.setBounds(0, 0, 500, 500);
		canvas.setFocus();
		drawCross();
		drawScala();
		textFields(shell);
		canvas.setDragDetect(true);
		canvas.addMouseListener(new MouseListener() {

			private int xStart;
			private int yStart;
			private int yExit;
			private int xExit;

			@Override
			public void mouseUp(MouseEvent e) {
				xExit = e.x;
				yExit = e.y;
				canvas.removeMouseMoveListener(new MouseMoveListener() {
					
					@Override
					public void mouseMove(MouseEvent e) {
					}
				});

				// canvas.setLocation(xExit, yExit);
			}

			@Override
			public void mouseDown(MouseEvent e) {
				xStart = e.x;
				yStart = e.y;
				canvas.addMouseMoveListener(new MouseMoveListener() {

					private int xDiff;
					private int yDiff;

					@Override
					public void mouseMove(MouseEvent e) {
						xDiff = xExit - xStart;
						yDiff = yExit - yStart;
						canvas.setLocation(xDiff, yDiff);
					}
				});
			}

kann mir da jemand helfen?:rtfm:
 

Marco13

Top Contributor
Ist das hier eigentlich erledigt?

Das
canvas.setLocation(xDiff, yDiff);
wird sicher nicht bewirken, dass sich der Inhalt des Canvas verschiebt...
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
U dynamisches JTree erstellen AWT, Swing, JavaFX & SWT 2
D Swing Dynamisches Dialog UI AWT, Swing, JavaFX & SWT 8
B 2D-Grafik Dynamisches Erstellen von Images und deren Animation AWT, Swing, JavaFX & SWT 4
M Swing Dynamisches Layout AWT, Swing, JavaFX & SWT 10
C Scollpane an dynamisches GridLayout anpassen? AWT, Swing, JavaFX & SWT 3
L Swing dynamisches Image-Panel in Layout einbinden AWT, Swing, JavaFX & SWT 10
N Swing Dynamisches Verhalten bei Änderung Fenstergröße AWT, Swing, JavaFX & SWT 6
trash Dynamisches Interface AWT, Swing, JavaFX & SWT 6
H LayoutManager Dynamisches Layout AWT, Swing, JavaFX & SWT 3
T Swing Dynamisches Bild AWT, Swing, JavaFX & SWT 8
T RCP-SWT dynamisches ScrolledComposite AWT, Swing, JavaFX & SWT 2
B dynamisches Spektrogramm in Java-Webanwendung AWT, Swing, JavaFX & SWT 3
G LookAndFeel Dynamisches Einlesen von LookAndFeels - NullPointerException AWT, Swing, JavaFX & SWT 4
M Dynamisches generieren und ausrichten von Komponenten AWT, Swing, JavaFX & SWT 11
T Dynamisches hinzufügen und entfernen von Bildern AWT, Swing, JavaFX & SWT 3
L Dynamisches Ändern der Größe in JPanel mit paint()-Methode AWT, Swing, JavaFX & SWT 8
J Dynamisches füllen von GridBagLayout: Größe der Komponenten AWT, Swing, JavaFX & SWT 4
S GUI, dynamisches Wechseln von JPanels in einem JFrame AWT, Swing, JavaFX & SWT 2
L Dynamisches Erzeugen eines Button AWT, Swing, JavaFX & SWT 2
M Schwieriges Label - Font - Problem "Dynamisches Label&a AWT, Swing, JavaFX & SWT 7
C Dynamisches Zuweisen von Daten an eine JTable zur Laufzeit AWT, Swing, JavaFX & SWT 4
C ActionListener für dynamisches Menü AWT, Swing, JavaFX & SWT 8

Ähnliche Java Themen

Neue Themen


Oben