Koordinatensystem dynamisch anpassen

Moin allerseits!
Wir haben in der Uni die Aufgabe, ein Koordinatensystem zu erstellen, dort Punkte (bekommen wir als x-y-Koordinaten in einer HTML-Datei) und diese miteinander zu verbinden.
Momentan muss man bei uns die Punkte noch in zwei Arrays manuell eingeben, aber das bekommen wir sicher noch hin, die aus der HTMl-Datei zu nehmen.
Unser größtes Problem, bei dem wir einfach nicht weiterkommen bzw. unsere Kenntnisse wohl nicht ausreichen, ist die dynamische Anpassung des Koordinatensystems. Also, dass das Ganze bei einem Ausreisserwert von sagen wir mal 1000 sich automatisch verkleinern bzw. die Skalierung so anpassen würde, dass die ganze Kurve inklusive solcher Ausreisser zu sehen ist mit passender Achsenbezeichnung. Könntet ihr uns da weiterhelfen?

Bisher haben wir das hier:

Java:
import java.awt.*;
import java.applet.Applet;

public class graph extends java.applet.Applet {
                        //Array x-Werte(Dichte)
    private double[] WerteX= {3.2 , 5.5, 6.5, 7.0};
 
                        //Array y-Werte(Druck)
    private double[] WerteY= {0.0 , 100.0, 320.0, 550.0};


    public void init() {
                        // Hintergrundfarbe schwarz
        setBackground (Color.black);
    }

    public void paint (Graphics g) {
        float x, y;
        int xnorm, ynorm, i;

        // ACHSEN ZEICHNEN -----------------------------------------------

        g.setColor(Color.red);                // Koordinatenbezeichnung x-Achse
        g.setFont(new Font("Arial", Font.BOLD, 20));
     
        for (i=0; i<=12; i+=3) {
            g.drawString(String.valueOf(i), 100+i*50, 670);
        }
                                               //Koordinatenbezeichnung y-Achse
         for (i=0; i<=12;i++)   {          
        g.drawString ( String.valueOf(i*50),80 ,650-50*i );
        }
      
     
                        // Vordergrundfarbe Rot fuer die Achsen
        g.setColor (Color.red);

                        // X-Achse zeichnen (schon skaliert auf 500%)
        g.drawLine (0, 650, 650, 650);

                        // Y-Achse zeichnen (schon skaliert auf 500%)
        g.drawLine (100, 0, 100, 650);

                        // Skaleneinteilung fuer die X-Achse zeichnen
        for (i = 100; i <= 750; i += 150){
            g.drawLine (i, 0, i, 650);
        }

                                                  // Skaleneinteilung fuer die Y-Achse zeichnen
        for (i = 0; i <= 650; i += 50){
            g.drawLine (100, i, 750, i);
        }
        int size = WerteX.length;

        g.setColor (Color.white);
                                                //X-Achse Werte hochskaliert,Punkte
        for (i=0; i<size; i++)    {             
            g.fillOval ((int)WerteX[i][I]*50+100-3, 650-(int)WerteY[i][I]-3, 6, 6);
        }                      
          
        for (i=0; i<size; i++) {
        g.drawLine ((int)WerteX[i][I]*50+100, 650-(int)WerteY[i][I],(int)WerteX[i+1]*50+100, 650-           (int)WerteY[i+1]);
        }
      
    }

}

Das ganze Ding lassen wir uns mit folgender Html-Datei im Appletviewer anzeigen:

Code:
<html>
<head>
</head>
<body>

<Applet code="graph.class" width="700" height="700"></Applet>


</body>
</html>
 
Zuletzt bearbeitet von einem Moderator:

dayaftereh

Top Contributor
Ich würde mal sagen du brauchst eine Transformation vom Punkte Koordinatensystem in das Bildschirm Koordinatensystem. Wobei mit Punkte Koordinatensystem, das von den Arrays gemeint ist und mit Bildschirm das auf dem du zeichnest...

Ganz einfach könntest du es machen mit einem Faktor (fx, fy) den du mal die Punkte (x, y) aus den Arrays nimmst. Diesen Faktor kannst du dann erhöhen bzw. erniedrigen so das es passt, am besten mit einem MouseListener für das MauseWheel.

EDIT

Code:
p_i × f = b_i
  • p_i: Punkt i
  • f: Faktor
  • b_i: Bildschirm Punkt i
 
Ich würde mal sagen du brauchst eine Transformation vom Punkte Koordinatensystem in das Bildschirm Koordinatensystem. Wobei mit Punkte Koordinatensystem, das von den Arrays gemeint ist und mit Bildschirm das auf dem du zeichnest...

Ganz einfach könntest du es machen mit einem Faktor (fx, fy) den du mal die Punkte (x, y) aus den Arrays nimmst. Diesen Faktor kannst du dann erhöhen bzw. erniedrigen so das es passt, am besten mit einem MouseListener für das MauseWheel.

EDIT

Code:
p_i × f = b_i
  • p_i: Punkt i
  • f: Faktor
  • b_i: Bildschirm Punkt i

Vielen Dank für deine Antwort! Ich glaube, wir sollen das so machen, dass sich das Koordinatensystem automatisch selbst anpasst...
 
Dynamisch in Bezug auf die Skalierung und die Darstellung des ganzen Koordinatensystems. Wir hatten bisher überlegt, irgendwie den minimalen und maximalen Wert aus dem Array für die X- und dem für die Y-Werte rauszubekommen und diese irgendwie so in den Teil mit der Skalierung einzubringen, dass sich die Achsen automatisch anpassen...
 

JStein52

Top Contributor
Ja, diese Idee ist ja auch genau richtig. Und das ergibt dann die Faktoren fx und fy die oben erwähnt wurden. Und was ist aktuell gerade das Problem ?
 
...es hapert an der Umsetzung :D Was müssen wir damit jetzt genau machen? Und wie bekommen wir den Min und den Max Wert? Wir sind leider ziemliche Anfänger und haben für den bisherigen Code schon Ewigkeiten gebraucht.
 

JStein52

Top Contributor
Ihr habt doch die x- und die y-Koordinaten in diesen beiden Arrays oder ? dann sucht ihr euch daraus jeweils das Maximum und das Minimum. Der Bereich dazwischen ist der den ihr mit eurer Zeichenfläche (den Achsen) abdecken müsst. Angenommen die kleinste X-Koordinate ist -10 und die grösste 90. Dann müsst ihr einen Bereich von 100 Einheiten darstellen können (xMax - Xmin). Wenn nun euere Fensterbreite 1600 Pixel ist dann entspricht 1 Zeicheneinheit eben 1600/(xMax-xMin) Pixeln. Genau so in y-Richtung.
Jetzt könnt ihr bei diesen Berechnungen natürlich noch Platz für Ränder lassen und evtl. runden. Aber das Prinzip sollte klar sein oder ?
 
Ihr habt doch die x- und die y-Koordinaten in diesen beiden Arrays oder ? dann sucht ihr euch daraus jeweils das Maximum und das Minimum. Der Bereich dazwischen ist der den ihr mit eurer Zeichenfläche (den Achsen) abdecken müsst. Angenommen die kleinste X-Koordinate ist -10 und die grösste 90. Dann müsst ihr einen Bereich von 100 Einheiten darstellen können (xMax - Xmin). Wenn nun euere Fensterbreite 1600 Pixel ist dann entspricht 1 Zeicheneinheit eben 1600/(xMax-xMin) Pixeln. Genau so in y-Richtung.
Jetzt könnt ihr bei diesen Berechnungen natürlich noch Platz für Ränder lassen und evtl. runden. Aber das Prinzip sollte klar sein oder ?

Vielen Dank, ja, so ungefähr hatten wir das schon überlegt, wir wissen nur nicht, wie wir das als Code aufschreiben können.
 

Nisbo

Bekanntes Mitglied
Ich stehe gerade vor einem ähnlichen Problem, Anpassung der Y Achse an dynamische Werte aus einen Datenbank und irgendwie komme ich mit der Lösung von hier nicht klar

Java:
    private double scaleYD(double yMin, double yMax){
        // 182 Pixel / (630 Watt - 600 Watt)
        // 182 / 30
        // = 6,066666666666667
        // 630 Watt / 6,066666666666667 = 103,8461538461538 Pixel
      
        double factor = 182 / (yMax-yMin);
      
        return factor;
    }

Meine Y Achse ist 182 Pixel hoch, jetzt nehmen wir mal an ich habe als Minimum 600 Watt und als Maximum 630 Watt, macht dann eine Differenz von 30 Watt ala 30 Pixel die darzustellen sind.

// 182 Pixel / (630 Watt - 600 Watt)
// 182 / 30
// = 6,066666666666667

damit hätten wir dann einen Faktor von 6,066666666666667

Will ich jetzt den Maximalwert darstellen dann kommt aber nicht 182 raus
// 630 Watt / 6,066666666666667 = 103,8461538461538 Pixel

Also wo liegt jetzt mein Denkfehler ?
 

JCODA

Top Contributor
@Nisbo wenn du schon Minimum = 600 und Maximum 630 wählst, und deine Achso somit nur 30 "Einheiten" hat, dann musst du von jeder Date dein Minimum abziehen
so ergibt sich :
630-600 = 30
30*6,066666 = 182
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
CptK Achsenskalierung in Koordinatensystem hängt Programm auf Java Basics - Anfänger-Themen 5
M ist das Koordinatensystem von Zeichenebene und Mouseposition verschoben ? Java Basics - Anfänger-Themen 1
H Koordinatensystem Java Basics - Anfänger-Themen 0
T Koordinatensystem zeichnen - Variablen merken? Quadratische Funktion zeichnen? Java Basics - Anfänger-Themen 5
D Koordinatensystem Java Basics - Anfänger-Themen 4
D Berechnung des Abstandes von zwei Punkten in einem Koordinatensystem Java Basics - Anfänger-Themen 14
Z Koordinatensystem zur Roboterorientierung Java Basics - Anfänger-Themen 7
P anordnung in einem koordinatensystem Java Basics - Anfänger-Themen 7
K Koordinatensystem Java Basics - Anfänger-Themen 3
M Koordinatensystem erstellen Java Basics - Anfänger-Themen 2
A koordinatensystem Java Basics - Anfänger-Themen 3
S Anfängerproblem: JButton und Raster/Koordinatensystem Java Basics - Anfänger-Themen 14
districon Dynamisch Programmierung/Backtracking/Memoization Java Basics - Anfänger-Themen 3
T Klassen Denkfehler im Klassen "dynamisch" instanzieren? Java Basics - Anfänger-Themen 4
J Verundung dynamisch gestalten Java Basics - Anfänger-Themen 21
B Folgende Abfrage dynamisch programmieren? Java Basics - Anfänger-Themen 8
R Datenbank-Werte dynamisch ausgeben Java Basics - Anfänger-Themen 19
D new arraylist (List) dynamisch erstellen Java Basics - Anfänger-Themen 1
B Klassen Klasse dynamisch laden. Java Basics - Anfänger-Themen 8
N Dynamisch erzeugtes Label wird nicht angezeigt, TextField schon Java Basics - Anfänger-Themen 1
J Tableview, ObservableList ein bisschen dynamisch Java Basics - Anfänger-Themen 6
C Array - Länge dynamisch übergeben Java Basics - Anfänger-Themen 7
D Erste Schritte Dynamisch Objekte erzeugen und diese durchsuchen Java Basics - Anfänger-Themen 7
GreyFox Object dynamisch mit werten versehen. Java Basics - Anfänger-Themen 4
G Array dynamisch ausgeben Java Basics - Anfänger-Themen 3
S JTable dynamisch mit Datenbankinhalten füllen Java Basics - Anfänger-Themen 6
F Erste Schritte If Bedingung in Schleife dynamisch erweitern Java Basics - Anfänger-Themen 4
K JLabel zur Laufzeit dynamisch erzeugen Java Basics - Anfänger-Themen 7
V Text aus einer .txt dynamisch ins applet einpassen Java Basics - Anfänger-Themen 0
Y Eingabe-Formular mit JSP dynamisch machen - j/n/wie? Java Basics - Anfänger-Themen 2
N Dynamisch JTree erstellen Java Basics - Anfänger-Themen 3
R Objekte dynamisch erstellen? Java Basics - Anfänger-Themen 14
C Variablen Array dynamisch halten und ausrechnen Java Basics - Anfänger-Themen 14
N Ergebnisse dynamisch in Tabelle schreiben Java Basics - Anfänger-Themen 3
G JObjekte dynamisch vom Server erzeugen lassen Java Basics - Anfänger-Themen 4
I Dynamisch erzeugten Buttons Methoden zuweisen Java Basics - Anfänger-Themen 6
H Objekte dynamisch erzeugen? Java Basics - Anfänger-Themen 6
M Variablen dynamisch variableninhalt von Object auslesen Java Basics - Anfänger-Themen 4
S if-Block dynamisch aufbauen Java Basics - Anfänger-Themen 5
M Static Variable "dynamisch" aufrufen? Java Basics - Anfänger-Themen 8
B Klassen Objekte während der Laufzeit dynamisch anlegen Java Basics - Anfänger-Themen 8
A JButtons dynamisch generieren mit verschiedenen actionhandlern Java Basics - Anfänger-Themen 6
P Scrollpane mit dynamisch erzeugten Komponenten Java Basics - Anfänger-Themen 3
U JPanel dynamisch gestalten Java Basics - Anfänger-Themen 7
R Liste graphischer Objekte z.B. JButton dynamisch erstellen Java Basics - Anfänger-Themen 13
A Dynamisch die Anzahl der Threads in der Cyclic Barrier ändern Java Basics - Anfänger-Themen 2
K Datentypen Full qualified Name dynamisch gestalten Java Basics - Anfänger-Themen 7
M For-Schleifen dynamisch generieren? Java Basics - Anfänger-Themen 10
sqsh statische jlabels dynamisch verwalten Java Basics - Anfänger-Themen 2
O Wie kann man das einfach lösen? (dynamisch viele Attribute) Java Basics - Anfänger-Themen 6
L Tray-Einträge und dazu passende ActionListener dynamisch erzeugen? Java Basics - Anfänger-Themen 2
D JPanel dynamisch anpassen Java Basics - Anfänger-Themen 5
S Dialog dynamisch vergrößern Java Basics - Anfänger-Themen 2
S Dynamisch Zeit auslesen Java Basics - Anfänger-Themen 11
M JTextPane dynamisch erzeugen Java Basics - Anfänger-Themen 2
J Aufgaben Dynamisch auf Pool von Threads verteilen. Java Basics - Anfänger-Themen 3
D ArrayList dynamisch befüllen Java Basics - Anfänger-Themen 14
G Objekteigenschaften dynamisch erzeugen Java Basics - Anfänger-Themen 7
jnoob Checkbox in Dialog Dynamisch erstellen Java Basics - Anfänger-Themen 2
K suche nicht dynamisch Datenstruktur Java Basics - Anfänger-Themen 6
J ListModel dynamisch und schnell aber sicher ändern Java Basics - Anfänger-Themen 7
M Dynamisch Instanzen erstellen. Java Basics - Anfänger-Themen 4
G Zweidimensionales Array - dynamisch Java Basics - Anfänger-Themen 4
B arrays dynamisch vergrößern Java Basics - Anfänger-Themen 5
V Kundenklasse dynamisch erzeugen und id hochzählen? Java Basics - Anfänger-Themen 4
C Dynamisch durch alle Objektvariablen eines Objektes iteriere Java Basics - Anfänger-Themen 15
P JPanel dynamisch mit ActionListener verwalten Java Basics - Anfänger-Themen 3
R Arraygroesse dynamisch anpassen Java Basics - Anfänger-Themen 8
X this dynamisch, super statisch? Java Basics - Anfänger-Themen 3
G Namen von ArrayListen dynamisch erzeugen Java Basics - Anfänger-Themen 4
H variable dynamisch ändern Java Basics - Anfänger-Themen 2
G Klasse dynamisch ohne Datei compilieren: Fehler Java Basics - Anfänger-Themen 4
G Klasse dynamisch nachladen: Fehler Java Basics - Anfänger-Themen 9
T Array Dynamisch Erweiterm Java Basics - Anfänger-Themen 15
H dynamisch Klassen laden und ausführen Java Basics - Anfänger-Themen 3
M Gleichungen dynamisch erstellen und ausrechnen? Java Basics - Anfänger-Themen 8
G Pfad dynamisch gestalten. Java Basics - Anfänger-Themen 3
B Matrix Dynamisch erzeugen Java Basics - Anfänger-Themen 3
G JTable dynamisch erzeugen. Java Basics - Anfänger-Themen 2
D Labels Dynamisch ? Java Basics - Anfänger-Themen 5
6 Swing: Dynamisch erzeugte Objekte sind verschoben Java Basics - Anfänger-Themen 2
G Variablenname dynamisch vergeben Java Basics - Anfänger-Themen 10
H 2DArray manuell dynamisch erweitern Java Basics - Anfänger-Themen 7
G Länge eines Array trimmen oder dynamisch verändern. Java Basics - Anfänger-Themen 3
M Dynamisch Klassen aufrufen Java Basics - Anfänger-Themen 4
H JLabel dynamisch anzeigen? Java Basics - Anfänger-Themen 10
T ActionListener zu Buttons dynamisch zuordnen Java Basics - Anfänger-Themen 10
G dynamisch Jtextfields erzeugen Java Basics - Anfänger-Themen 3
M HTML Seite die Daten in JavaApplet dynamisch verarbeiten Java Basics - Anfänger-Themen 2
H Variablenname dynamisch festlegen Java Basics - Anfänger-Themen 3
H Variablenname dynamisch festlegen Java Basics - Anfänger-Themen 3
J Tabelle mit mehreren Zeilen dynamisch aufbauen Java Basics - Anfänger-Themen 2
K Bild dynamisch erstellen Java Basics - Anfänger-Themen 2
M Klasse dynamisch erzeugen! Java Basics - Anfänger-Themen 4
M [SOLVED]JComboBoxen dynamisch erstellen und abfragen Java Basics - Anfänger-Themen 2
S Dynamisch Platz für ein Array reservieren? Java Basics - Anfänger-Themen 7
Z Objekte dynamisch erzeugen Java Basics - Anfänger-Themen 19
O Variabelnamen dynamisch generieren Java Basics - Anfänger-Themen 3
E Klassenaufrufe dynamisch mit Reflection Java Basics - Anfänger-Themen 4
J Instanzen dynamisch erzeugen Java Basics - Anfänger-Themen 8

Ähnliche Java Themen

Neue Themen


Oben