Avatar billede morteeart Nybegynder
14. september 2004 - 18:58 Der er 8 kommentarer og
1 løsning

Graf tegning i java

hej

jeg sidder og kigge på noget graftegning i java
og jeg har fundet dette eksempel som tegner en sinus kurve,
og jeg har da også prøvet at kode det om, men jeg kan stadig ikke helt forstå fremgangsmåden i det

Så er der nogen som kan give en god forklaring, eller evt. et andet eksempel (kode) til tegning af grafer ?

### Eksempel jeg fandt ###
import java.util.*;
import java.awt.*;
public class Kurvetegning extends Frame
{
  Vector punkter;        // objektvariabel kendt i både konstruktøren og paint()

  public Kurvetegning()  // Forbered punkterne i konstruktøren
  {
    punkter = new Vector();
    int br = 400;    // bredde
    int hø = 300;    // højde
    setSize(br, hø);

    for (int i=0; i<br; i++)
    {
      double y = 0.5*hø - 0.4*hø*Math.sin((double) i*20 / br);
      punkter.addElement(new Point(i, (int) y ));
    }
    setVisible(true);
  }

  public void paint(Graphics g) // tegn punkterne
  {
    for (int i=0; i<punkter.size(); i=i+1)
    {
      Point p = (Point) punkter.elementAt(i);
      g.drawRect(p.x, p.y, 5, 5);
    }
  }
}
Avatar billede arne_v Ekspert
14. september 2004 - 19:41 #1
constructor laver en Vector med punkter

paint metoden kaldes af awt til at tegen skærmen og den bruger Vector'en
og tegner alle punkterne

Den lidt mystiske formel som jeg tror kan laves anderledes bergener så y koordinat
udfra x koordinat, som bruges til at konstrure punkt udfra.
Avatar billede arne_v Ekspert
14. september 2004 - 19:42 #2
Der findes pakker til at lave grafer med bl.a. JFreeChart.
Avatar billede morteeart Nybegynder
14. september 2004 - 19:51 #3
ja, det jeg så er i tvilv om er hvordan den formel fungere.

jeg har kigget på JFreeChart og der er lidt for kompliceret, faktisk så meget at jeg synes at det virker nemmere at kode et script til det selv.

Pga. jeg skal kun kunne lave funktions ligninger her til en start.
Avatar billede arne_v Ekspert
14. september 2004 - 19:53 #4
Her er en lidt tilrettet version:

import java.util.*;
import java.awt.*;
import java.awt.event.*;

public class Sinus extends Frame {
    Vector points;
    public Sinus() {
        points = new Vector();
        int w = 400;
        int h = 300;
        setSize(w, h);
        for (int x = 0; x < w; x++) {
            int y = (int)(0.5 * h + 0.4 * h * Math.sin(x * 5 * Math.PI / w));
            points.addElement(new Point(x, y));
        }
        setVisible(true);
        addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent e) {
              System.exit(0);
            }
        });
    }
    public void paint(Graphics g) {
        for (int i = 0; i < points.size(); i++) {
            Point p = (Point) points.elementAt(i);
            g.drawRect(p.x, p.y, 2, 2);
        }
    }
    public static void main(String[] args) {
        new Sinus();
    }
}
Avatar billede arne_v Ekspert
14. september 2004 - 19:55 #5
Formlen var faktisk ikke helt tosset.

0.5 * h + 0.4 * h *

sikrer at kurven svinger mellem 0.1 og .09 af højden

eksemplets 20 og min 5 bestemmer hvor mange toppe du få (jeg syntes bare
at det var pænere at tage udgangspunkt i PI)
Avatar billede arne_v Ekspert
14. september 2004 - 19:55 #6
Den her er ret nødvendig for at kunne lukke vinduet igen:

        addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent e) {
              System.exit(0);
            }
        });
Avatar billede arne_v Ekspert
14. september 2004 - 19:55 #7
OK ?
Avatar billede morteeart Nybegynder
14. september 2004 - 20:06 #8
jo, mange tak. :D

Passer det at: int y = (int)(0.5 * h + 0.4 * h * Math.sin(x * 5 * Math.PI / w));
finde y-væriden ud fra et givent x punkt ?

det gør den også, men desværre ligger 0.0 jo i venstre top :(
Avatar billede arne_v Ekspert
14. september 2004 - 20:08 #9
Ja - den beregner y udfra x.

0.5 * h + 0.4 * h *

gør at kurven kommer til at ligge midt i selvom (0,0) ligger i toppen.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester