# Graphen in Java zeichnen



## Java4win (11. Jul 2017)

Hey ich versuche gerade einen Graphen mit einem Programm zeichnen zu lassen. 
Zu beginn habe ich die Werte im Programm festgelegt, dies

kann man ja später noch ändern das man diese selber eingibt. ( Es sollte ein exponentieller Graph sein also "Anfangswert * Steigung^x" ) 

So sieht mein ProgrammCode dazu aus. Ich bekomme ein sehr interessantes Ergebnis aber leider keinen Graphen 

Werte: 
Var.screenheight = 800;
Var.screenwidth = 800; 
Var.anfangswert = 100;
Var.steigung       = 2; 



```
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;

import javax.swing.JLabel;

public class Draw extends JLabel {
   
    protected void paintComponent(Graphics g){
       
        super.paintComponent(g);
       
        Graphics2D g2d = (Graphics2D) g;
       
        g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
       
        g2d.setColor(Color.BLACK);
        g2d.fillRect(0, 0, Var.screenheight, Var.screenwidth);
       
       
        for (int i = 0; i < 1000; i++){
           
            g2d.setColor(Color.WHITE);
            g2d.fillRect(i, Var.anfangswert * Var.steigung^i, 1, 1);
           
        }
       
    }

}
```

Besten Dank im Voraus.


----------



## Robat (11. Jul 2017)

Was glaubst du denn was bei


Java4win hat gesagt.:


> Var.anfangswert * Var.steigung^i


heraus kommt?


----------



## Java4win (11. Jul 2017)

Robat hat gesagt.:


> heraus kommt?


doch der y Wert?


----------



## Robat (11. Jul 2017)

Okay ich frag noch mal anders.
Was glaubst du was der ^ - Operator in Java macht


----------



## Java4win (11. Jul 2017)

Robat hat gesagt.:


> Was glaubst du was der ^ - Operator in Java macht


Ich bin erst seit knapp 2 Monaten dabei und daher dachte ich bisher das der ^- Operator etwas potenziert. Aber anscheinend liege ich damit falsch.


----------



## Robat (11. Jul 2017)

Die Frage war auch kein Vorwurf sondern eher ein Anreiz sich damit zu beschäftigen 

Nein also der `^-Operator` ist in Java das XOR.
Hier mal ein kleines Beispiel.
Wenn in deinem Code 5^6 steht, kommt nicht 15625 raus sondern 3 

Warum?

```
Wertetabelle für XOR sieht so aus:
^ | 0 1      ^ | F T
--+-----     --+-----
0 | 0 1      F | F T
1 | 1 0      T | T F

und demnach kommt bei 5^6 folgendes raus:

(dezimal)       (binär)
     5       =   101
     6       =   110
-------------------- XOR
     3       =   011
```

Wenn du wirklich mathematisch 5 hoch 6 rechnen willst, musst du `Math.pow(base, exp)` benutzen


----------



## Java4win (11. Jul 2017)

Robat hat gesagt.:


> Die Frage war auch kein Vorwurf sondern eher ein Anreiz sich damit zu beschäftigen


Haha ja habe ich gerade schon getan  
Danke für deine Hilfe ich habe ist auch schon bereits mit Math.pow versucht:

```
g2d.fillRect(i,Math.pow(Var.anfangswert * Var.steigung,i), 1, 1);
```

Leider dürfen in die fillRect Methode nur int - Werte rein und keine Double Werte welche in die Math.pow Methode müssen 

Mal gucken wie ich das jetzt hin bekomme


----------



## Robat (11. Jul 2017)

Stichwort hier heißt `casten`


----------



## Java4win (11. Jul 2017)

Robat hat gesagt.:


> Stichwort hier heißt casten


Das weiß ich sogar bereits was das ist  

Leider wird y zu schnell zu groß und es entsteht kein Graph sondern lediglich einzelne Punkte des Graphen,
das habe ich nicht mit bedacht 

Aber besten Dank für die Hilfe, habe heute wieder viel neues gelernt


----------



## mrBrown (11. Jul 2017)

Vielleicht ist da statt einem Rectangle eine Line angebrachter


----------



## Java4win (11. Jul 2017)

mrBrown hat gesagt.:


> Vielleicht ist da statt einem Rectangle eine Line angebrachter


Ich war sogar schon so weit mit dem Recherchieren das ich nun weiß das man eine Polyline verwenden kann. 


```
for (int i = 0; i < 10; i++){
           
            g2d.setColor(Color.WHITE);
            g2d.drawPolyline(int [i], int [(int)Math.pow(Var.anfangswert * Var.steigung,i)] , 5);
```

Nur ich habe noch nicht ganz herausbekommen, wie ich meine x und y Werte in die int arrays der Polyline Methode bekommen kann, bisher ist jeder versuch gescheitert  aber man lernt ja am besten aus seinen Fehlern


----------



## mrBrown (11. Jul 2017)

Du musst erst deine Arrays anlegen, quasi als Wertetabelle, und die dann dem drawPolyline übergeben


----------

