Sinus und Kosinus Graph

jorgeHX

Erfahrenes Mitglied
Hallo Leute,
kann mir jemand verraten wie ich eine Sinus oder Kosinuskurve zeichnen kann?

Sie soll in einem Rechteck gezeichnet werden.

Beispiel:

vom Punkt A(20/150) zum Punkt B(135/20). Gibt es ne Funktion zu oder ein Beispiel?

Danke,
JP

Hat niemand eine Idee
 
Zuletzt bearbeitet:
Wo genau liegt Dein Problem?
Beim Zeichnen (Setzen der Pixel)?
Beim Formulieren der Formel?

Und wie ist das Zeichnen der Kurve zwischen zwei Punkten zu verstehen? Im Normalfall definierst Du doch einen Start- und End-x-Wert, durchläufst dieses Intervall und berechnest den Funktionswert (y = sin(x)) und zeichnest diesen Punkt ein (nach evtl. Skalierung für eine besser Bildschirmdarstellung) bzw. verbindest die berechneten Punkte mit Linien.
 
Hallo,
also ich will eigentlich sinus interaktiv zeichnen. Man sollte sich das quasi wie ein Zeichenprogramm vorstellen, wo man anfangs einmal klickt (=Startkoordinate) und dann am Ende loslässt (=Endkoordinate).

Über diese zwei Punkte soll dann ne Sinuskurve gezeichnet werden...
Wie schreibe ich denn die Formel für Sinus in Java?

Danke,
JP
 
[..]
Wie schreibe ich denn die Formel für Sinus in Java?[..]

Versuchs mit double java.lang.Math.sin(double)

Zum Zeichnen würde ich die .paintComponent(Graphics) eines JPanel überschreiben.

Wenn Du die Funktion zwischen zwei Mausklicks zeichnen willst, musst Du an dem JPanel einen MouseListener anmelden.

Das war jetzt die Kurzform. Aber das sind erstmal die wesentlichen Arbeitsschritte.

Grüße
Inter
 
Hi Inter.
das mit dem zeichnen hab ich verstanden. Ich kann auch ne normale Linie zeichnen mit der draw-Methode.

Kann man damit nicht auch einfach jetzt ne sinus-kurve zeichnen?
Irgendwie check ich das nicht ganz.

Danke für die Hilfe,
JP
 
Moin!
Nun ich würde so anfangen wie Inter es schon beschrieben hat.
Und jedesmal wenn deine Maus losgelassen wird, der MouseListener also ein Event empfängt, würde ich einen GeneralPath von deinem Startpunkt, bis zu deinem jetzigen Punkt erzeugen.
Ungefähr so:
Code:
public void mouseReleased(MouseEvent e){
int endX = e.getPoint().x;
float iter = startX;
GeneralPath line = new GeneralPath();
line.moveto(startX,startY);
while(iter<endX){
   iter = iter+0.1;
   line.lineto(iter,Math.sin(iter));
}



}

Und in der paint() Methode diesen Pfad dann malen

Code:
public void paint(Graphics g){
super.paint(g);
((Graphics2D)(g)).draw(line);
}

Natürlich musst du nun noch den Pfad wie matdacat sagte entsprechend skalieren, bzw translieren.

*grüssle*
MeinerEiner
 
Zuletzt bearbeitet von einem Moderator:
[..]
Kann man damit nicht auch einfach jetzt ne sinus-kurve zeichnen?
[..]

Das geht natürlich nicht mit einem einfachen Methodenaufruf. So wie MeinerEiner das oben in seinem Post zeigt ist das eigentlich ein einfacher Weg. Die sin-Methode berechnet Dir ja nur einen Sinuswert von dem übergebenen Winkel Parameter. Aber um eine ganze Kurve zu malen, brauchst Du ja viele Sinuswerte. MeinerEiner berechnet also die Differenz zwischen deinen beiden Mausklicks und geht den gesamten Weg in +0.1 Schritten ab. Er berechnet also den Sinus von 0.1, von 0.2, 0.3 und so weiter. Wenn Du die Sinusfunktion auf ein Stück Papier malen willst, berechnest Du ja auch einige Werte und schreibst Sie Dir in eine Tabelle, dann verbindest Du die Punkte und Du hast einen Graph.
 
Hi MeinerEiner,

hab das mal probiert:

Code:
        int endX = endx;
        double iter = st.x;
        GeneralPath line = new GeneralPath();
        line.moveTo((float)st.x, (float)st.y);
        while (iter < endX) {
          iter = iter + 0.1;
          line.lineTo((float)iter, (float)Math.sin(iter));
        }


        BasicStroke stroke1 = new BasicStroke(strokeWidth);
        g.setStroke(stroke1);
        g.draw(line);

leider kommt da nur eine senkrechte Linie
 
*Seufz*

Du weist ja hoffentlich, wie so der Wertebereich einer SinusFunktion ist?
Er liegt zwischen -1 und 1. Natürlich sieht man nicht viel, wenn man nur -1 und 1 wechselt..
Daher sagte ich auch schon;

Natürlich musst du nun noch den Pfad wie matdacat sagte entsprechend skalieren, bzw
translieren


D.h, nimm beispielsweise deine ganzen y- Werte mal 20 und addiere 50 drauf.. dann hast du deine Sinuskurve.. Mit den Werten muss mal halt ein wenig spielen..

*grüssle*
MeinerEiner
 
Hallo nochmal.
also ganz so dumm bin ich ja auch nicht. Ich weiß schon was ne Sinusfunktion ist, nur habe ich Probleme damit sie interaktiv zu zeichnen.

Ich will quasi ein gewellte Linie interaktive zeichnen können, d.h. dass ich irgendwo anfange zu zeichnen und dann auch in 360Grad drehen kann bevor ich den Mauszeiger loslasse.

Das ganze ist mit einer Linie kein Problem, nur diese Wellen machen mir Probleme....
 

Neue Beiträge

Zurück