f(x)=x² zeichnen

Mosquera

Mitglied
Hallo liebe Community,

gerade erst angemeldet und schon die erste Frage! :p
Bin momentan dabei ein Programm zu schreiben, welches mir die Funktion f(x)=x² zeichnet.

Ich suche keine Lösung, sondern nur den Anfang und eventuell eine Erklaerung dazu.
Ich lasse euch ein paar Bilder und mein Code da und danke euch im Vorraus!


Erstes Layer: Bild!
Zweites Layer: Bild!

Java:
package ebkherne.hbit3.funktionsplotter;

import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class Angaben extends JFrame implements ActionListener {

    private JPanel[][] pnlMain;
    private JLabel lblfx;
    private JButton btnPlot;
    protected JTextField txtFunktion;
    protected static double varFunktion;

    public Angaben() {

        // Panel & Layout
        int i = 2;
        int j = 2;

        pnlMain = new JPanel[i][j];
        this.setLayout(new GridLayout(i, j));

        for (int m = 0; m < i; m++) {
            for (int n = 0; n < j; n++) {
                pnlMain[m][n] = new JPanel();
                this.add(pnlMain[m][n]);
            }
        }

        // Erstellung
        lblfx = new JLabel("Bitte geben sie f(x) an: ");
        txtFunktion = new JTextField();
        btnPlot = new JButton("Plot!");

        // Eigenschaften der J's
        txtFunktion.setPreferredSize(new Dimension(100, 20));
        btnPlot.setPreferredSize(new Dimension(100, 20));

        // Hinzufugen
        pnlMain[0][0].add(lblfx);
        pnlMain[0][1].add(txtFunktion);
        pnlMain[1][1].add(btnPlot);

        btnPlot.addActionListener(this);

        // Eigenschaften
        this.setBounds(300, 200, 300, 100);
        this.setResizable(false);
        this.setDefaultCloseOperation(EXIT_ON_CLOSE);
        this.setVisible(true);
    }

    @Override
    public void actionPerformed(ActionEvent ae) {

        varFunktion = Double.parseDouble(txtFunktion.getText());

        if (ae.getActionCommand().equals("Plot!")) {
            new Koordinatensystem();
            this.dispose();
        }
    }

}

Java:
package ebkherne.hbit3.funktionsplotter;

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class Koordinatensystem extends JFrame implements ActionListener {

    private JPanel pnlMain;
    private JButton btnZuruck;
    protected JPanel Zeichnen = new Zeichnen();

    public Koordinatensystem() {

        btnZuruck = new JButton("Zurück");
        btnZuruck.addActionListener(this);

        pnlMain = new JPanel(new BorderLayout());
        pnlMain.add(Zeichnen, BorderLayout.CENTER);
        pnlMain.add(btnZuruck, BorderLayout.SOUTH);

        this.setPreferredSize(new Dimension(607, 609));
        this.pack();
        this.setContentPane(pnlMain);
        this.setResizable(false);
        this.setDefaultCloseOperation(EXIT_ON_CLOSE);
        this.setVisible(true);
    }

    @Override
    public void actionPerformed(ActionEvent ae) {

        if (ae.getActionCommand().equals("Zurück")) {
            this.dispose();
            new Angaben();
        }

    }

}

Java:
package ebkherne.hbit3.funktionsplotter;

import java.awt.Color;
import java.awt.Graphics;

import javax.swing.JPanel;

public class Zeichnen extends JPanel {

    public Zeichnen() {

       
    }

    public void paint(Graphics g) {

        super.paint(g);
        g.setColor(Color.BLACK);
        g.drawLine(0, 300, 600, 300);
        g.drawLine(300, 0, 300, 600);

        for (int i = 0; i <= this.getWidth(); i += 20) {

            g.drawLine(i, 295, i, 305);
        }

        for (int i = 0; i <= this.getHeight(); i += 20) {

            g.drawLine(295, i, 305, i);
        }

    }

}
 

Robat

Top Contributor
Und was genau ist deine Frage?

Wenn du - so wie es das Bild impliziert - jede beliebige Funktion zeichnen lassen willst solltest du noch mal einen Schritt zurück gehen. Das ist ohne externe Library gar nicht mal so trivial.
Wenn es dir wirklich nur um die Funktion f(x) = x² geht dann .. nun ja überleg dir mal wie du dir von Hand die Funktion malen würdest.

Du würdest dir ein bestimmtes Intervall vorgeben (sagen wir -100 <= x <= 100) und für jedes x das y errechnen und einen Punkt malen. Am Ende würdest du die Punkte verbinden.
Das kannst du auch in Java machen. Iteriere über dein Intervall was du hast (sicherlich -WIDTH/2 <= x <= WIDTH/2) und rechne für jeden Punkt aus. (Tipp: Math.pow(base, exp) ).
Die Punkte kannst du dann bspw durch ein PolygonLine verbinden lassen.

Gruß Robert
 

JStein52

Top Contributor
Mhmmm ... ich würde mal sagen die Zauberworte sind:

- Wertebereich in x-Richtung abfragen ( z.B. x = -3.5 bis x = +1.0 )
- daraus die Extemwerte der Funktion in diesem Intervall berechnen (z.B. y = -3.5 und y = +5.0)
- mit diesen Werten und der Höhe und Breite des Plotbereiches in Pixeln die X- und y-Achsen skalieren.
- dann den Wertebereich pixelweise durchlaufen und für jeden x-Wert den zugehörigen y-Wert ausrechnen und dort einen Punkt malen.
- wenn du es hübsch machen willst noch die Achsen einzeichnen mit irgendeiner Beschriftung.
Implementieren würde ich den eigentlichen Plotter als Subklasse von JPanel (so wie du es oben begonnen hast.) Ich würde diese Klasse abstrakt machen mit einer abstrakten Methode double f(double x) und in einer abgeleiteten Klasse implementierst du diese, z.B. f(x) =x^2 oder f(x) = sin(x) oder ... oder ...
 

Mosquera

Mitglied
Guten Tag,

habe mir heute irgendwo ein Fehler untergeschoben :(
Kann zwar manche Funktionen zeichnen (nur x*x und noch hoeher, aber f(x)=x nicht), aber komischerweise ist die untere Haelfte der Y-Achse verschwunden.
Wenn ihr gerade mal drauf schaut, waere es auch toll wenn ihr mir einmal sagen koenntet wie ich am besten die Punkte vom Graphen verbinden kann.

Wie immer hier ein Bild. (puu.sh)

Java:
package ebkherne.hbit3.funktionsplotter;

import java.awt.Dimension;

import javax.swing.JFrame;
import javax.swing.JPanel;

public class GUI extends JFrame {

    protected JPanel Zeichnen;
 
    public GUI() {
     
        Zeichnen = new Zeichnen(600, 600);
     
        this.setPreferredSize(new Dimension(606, 629));
        this.pack();
        this.setContentPane(Zeichnen);
        this.setResizable(false);
        this.setDefaultCloseOperation(EXIT_ON_CLOSE);
        this.setVisible(true);
    }

}

Java:
package ebkherne.hbit3.funktionsplotter;

import java.awt.Color;
import java.awt.Graphics;

import javax.swing.JPanel;

public class Zeichnen extends JPanel {

    private int X, Y;
 
    public Zeichnen(int X, int Y) {
     
        this.X = X;
        this.Y = Y;
    }

    public void paint(Graphics g) {

        super.paint(g);
        g.drawLine(0, this.getHeight() / 2, X, this.getHeight() / 2);
        g.drawLine(this.getWidth() / 2, 0, this.getWidth() / 2, Y);
        System.out.println("Breite:" + this.getWidth() + " " + "Hoehe:" + this.getHeight());

        for (int i = 0; i < this.getWidth(); i += 15) {
         
            g.drawLine(this.getWidth() / 2 - 5, i, this.getWidth() / 2 + 5, i);
            g.drawLine(i, this.getHeight() / 2 - 5, i, this.getHeight() / 2 + 5);
        }
     
        for (X = -this.getWidth(); X < this.getWidth(); X++) {
         
            int X_update = X;
            int Y_update = Y;
         
            Y = X*X/this.getHeight()-(this.getHeight()/2);
         
            X_update = X;
            Y_update = (this.getHeight()/2) - Y;
         
         
            g.drawLine(X_update+(this.getWidth()/2), Y_update-(this.getHeight()/2), X_update+(this.getWidth()/2), Y_update-(this.getHeight()/2));
        }
     
     
    }
 
}
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
J SWING UI Designer und zeichnen Java Basics - Anfänger-Themen 4
luggas89 Mit Jframe live zeichnen Java Basics - Anfänger-Themen 4
K 3D Fläche Zeichnen Java Basics - Anfänger-Themen 2
J Bild auf Hintergrundbild zeichnen Java Basics - Anfänger-Themen 5
R Iterativ zeichnen Java Basics - Anfänger-Themen 1
T Java Swing - Dreieck zeichnen mit verschiedenen Variablen Java Basics - Anfänger-Themen 8
P JFrame, Linien zeichnen, MouseListener Java Basics - Anfänger-Themen 2
KogoroMori21 Mit einer Schleife eine Treppe zeichnen Java Basics - Anfänger-Themen 29
V Speicherzustand zeichnen Java Basics - Anfänger-Themen 0
O Klappt nicht: Ein Panel neu zeichnen Java Basics - Anfänger-Themen 3
CptK Interface Bilder mit Graphics g zeichnen Java Basics - Anfänger-Themen 7
B Java JFrame zeichnen Java Basics - Anfänger-Themen 4
J Graphen in Java zeichnen Java Basics - Anfänger-Themen 11
L Anfängerin möchte Linie zeichnen Java Basics - Anfänger-Themen 8
D JPanel mehrere Formen zeichnen Java Basics - Anfänger-Themen 5
S Zeichnen mit Wiederholungen Java Basics - Anfänger-Themen 12
B Wie kann ich Linien rekursiv zeichnen? Java Basics - Anfänger-Themen 4
P Einen String mittig zeichnen? Java Basics - Anfänger-Themen 1
T Koordinatensystem zeichnen - Variablen merken? Quadratische Funktion zeichnen? Java Basics - Anfänger-Themen 5
M Ein Bild durch Objekterzeugung zeichnen Java Basics - Anfänger-Themen 5
W Wie kann ich in Java eine Kurve aus Punkten zeichnen? Java Basics - Anfänger-Themen 25
snipesss Linie zeichnen ohne extra Klasse? Java Basics - Anfänger-Themen 3
C Umrisse von Bilddateien mithilfe Polygonen zeichnen Java Basics - Anfänger-Themen 5
G Aus einem Code ein Sequenzdiagramm zeichnen? Java Basics - Anfänger-Themen 1
K Rechtecke rekursiv zeichnen Java Basics - Anfänger-Themen 20
V Quadrate rekursiv zeichnen Java Basics - Anfänger-Themen 7
B Java Graphen zeichnen - Brauche Hilfe Java Basics - Anfänger-Themen 9
C Schleifenaufgabe - Molekül zeichnen Java Basics - Anfänger-Themen 6
K Ungenauigkeit beim Zeichnen von Funktionen Java Basics - Anfänger-Themen 6
H Linie zeichnen... Java Basics - Anfänger-Themen 16
N Treppe zeichnen Java Basics - Anfänger-Themen 1
M Quadrat zeichnen einfach bitte! Java Basics - Anfänger-Themen 2
P Shape Zeichnen klappt nicht - einlesen der Breite/Höhe schon Java Basics - Anfänger-Themen 1
M in Java zeichnen Java Basics - Anfänger-Themen 2
J JLabel Icon neu zeichnen Java Basics - Anfänger-Themen 2
J Rechteck zeichnen mit Canvas Java Basics - Anfänger-Themen 7
D Zeichnen, Schleifen Java Basics - Anfänger-Themen 7
S Zeichnen , Schleifen Java Basics - Anfänger-Themen 4
S Rechteck zeichnen Java Basics - Anfänger-Themen 2
S Ein Graphics Obejct mehrmals mit denselben Eigenschaften zeichnen lassen?!?!? Java Basics - Anfänger-Themen 4
S Wo beginnt ein Draw String zu zeichnen. Java Basics - Anfänger-Themen 4
S Paint Anwendung: Freihandlinien zeichnen Java Basics - Anfänger-Themen 4
llabusch Layout neu zeichnen lassen Java Basics - Anfänger-Themen 2
A Histogramm zeichnen Java Basics - Anfänger-Themen 2
S Punkt in Java zeichnen Java Basics - Anfänger-Themen 14
E Dreieck zeichnen Java Basics - Anfänger-Themen 3
gamebreiti Methoden JPanel nach clearAll() und add neu zeichnen Java Basics - Anfänger-Themen 1
T Baum mit Turtle zeichnen Java Basics - Anfänger-Themen 2
C Hilfe beim Zeichnen Java Basics - Anfänger-Themen 8
D Haus zeichnen Java Basics - Anfänger-Themen 4
K Methoden Objekt auf JFrame zeichnen Java Basics - Anfänger-Themen 16
H 27 Kreise Zeichnen Java Applet Java Basics - Anfänger-Themen 2
S Problem mit "Zeichnen auf Kommando" Java Basics - Anfänger-Themen 2
M Double Punkte Zeichnen Java Basics - Anfänger-Themen 7
S Funktionen zeichnen Java Basics - Anfänger-Themen 2
2 Bild auf JApplet zeichnen Java Basics - Anfänger-Themen 18
R 2D Grafik zeichnen Java Basics - Anfänger-Themen 4
F Line zeichnen und Werte ändern Java Basics - Anfänger-Themen 6
B Grafik zeichnen Java Basics - Anfänger-Themen 25
B Erste Schritte Weihnachtsbaum zeichnen Java Basics - Anfänger-Themen 6
N Per Button Kreis zeichnen Java Basics - Anfänger-Themen 8
T mehrere Punkte zeichnen ohne löschung Java Basics - Anfänger-Themen 4
J Für 3 Sekunden etwas bestimmtes zeichnen Java Basics - Anfänger-Themen 8
C Kreis nach Mausklick zeichnen Java Basics - Anfänger-Themen 5
C Auf Button-Druck zeichnen Java Basics - Anfänger-Themen 2
R Methoden Zeichnen auf Button-Druck durch Paint-Methode Java Basics - Anfänger-Themen 2
D Klassen Zeichnen von Figuren mittels vorgegebener Klasse Java Basics - Anfänger-Themen 3
J Schachbrett zeichnen Java Basics - Anfänger-Themen 9
J Innerhalb der Border zeichnen Java Basics - Anfänger-Themen 9
J Hoher Speicherverbrauch beim Zeichnen von Images aus einer ArrayList Java Basics - Anfänger-Themen 10
A Blitze mit Linien zeichnen Java Basics - Anfänger-Themen 15
U Kreis um Textfelder zeichnen Java Basics - Anfänger-Themen 4
R Balkendiagramm zeichnen Java Basics - Anfänger-Themen 14
J Bild anhand von Koordinaten zeichnen Java Basics - Anfänger-Themen 10
B GUI Parkplatz zeichnen Java Basics - Anfänger-Themen 10
S Mehrere Zeichnungen zeichnen Java Basics - Anfänger-Themen 16
A Linie Zeichnen Applet mit Double Wert Java Basics - Anfänger-Themen 3
F Image übertragen und zeichnen Java Basics - Anfänger-Themen 8
P Funktion zeichnen Java Basics - Anfänger-Themen 6
Q Zeichnen außerhalb der paint-methode Java Basics - Anfänger-Themen 7
F zeichnen in JPanel Java Basics - Anfänger-Themen 7
T Transparente Bilder mit Graphics zeichnen Java Basics - Anfänger-Themen 17
T Sterne zeichnen Java Basics - Anfänger-Themen 4
M Bilder laden und zeichnen Java Basics - Anfänger-Themen 3
G Polygon in Frame zeichnen Java Basics - Anfänger-Themen 3
S X Zeichnen als Muster ausgeben Java Basics - Anfänger-Themen 5
P Kurven zeichnen Java Basics - Anfänger-Themen 5
I dauerhaftes zeichnen Java Basics - Anfänger-Themen 3
H Zeichnen in JPanel Java Basics - Anfänger-Themen 8
W Funktions-Graphen "zeichnen" Java Basics - Anfänger-Themen 2
J Bilder auf Bilder zeichnen Java Basics - Anfänger-Themen 8
I Rechteck Zeichnen Java Basics - Anfänger-Themen 9
W Zeichnen in Swing Java Basics - Anfänger-Themen 7
N Linie auf spezielle Area zeichnen Java Basics - Anfänger-Themen 9
K Auf JPanel Zeichnen Java Basics - Anfänger-Themen 8
E Frame neu Zeichnen Java Basics - Anfänger-Themen 3
D Problem beim Zeichnen von "Das Haus vom Nikolaus" Java Basics - Anfänger-Themen 10
M Farbiges Rechteck zeichnen Java Basics - Anfänger-Themen 2
M Zeichnen in Java Java Basics - Anfänger-Themen 4
D Wie kann meine Klasse in ein JPanel zeichnen? Java Basics - Anfänger-Themen 14

Ähnliche Java Themen

Neue Themen


Oben