WCM Forum

WCM Forum (http://www.wcm.at/forum/index.php)
-   Programmierung (http://www.wcm.at/forum/forumdisplay.php?f=17)
-   -   Hilfe bei Graphen in Java Swing(mit code) (http://www.wcm.at/forum/showthread.php?t=80691)

Slowhand 16.12.2002 03:36

Hilfe bei Graphen in Java Swing(mit code)
 
Habe hier einen Swing Graphen den ich verändern möchte undzwar dass ich ihm Parameter für x1, y1, x2, y2, etc übergeben kann und er zeichnet es dann. So wie der Code ist zeichnet er eine x² Funktion Aber dass ich ihm nur ein paar gewisse Punkte geben kann klappt nicht sorecht.
Der code wäre folgender:

// GraphDemo.java

import java.awt.*;
import javax.swing.*;

public class GraphDemo extends JFrame {

GraphDemo()
{
// super("Resize me!");
this.setTitle("Frame Title");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
getContentPane().add(new GraphPane());
setSize(400,400);
setVisible(true);
}

public static void main(String[] args) {
new GraphDemo();
}
}

class GraphPane extends JPanel
{
final int margin = 8;
public void paintComponent(Graphics g)
{
Dimension d = getSize();
Rectangle r = new
Rectangle(margin,margin,d.width-margin*2,d.height-margin*2);
// background color
g.setColor(new Color(255,255,255));
g.fillRect(0,0,d.width,d.height);
// grid color
g.setColor(Color.lightGray);
drawGrid(g,r,16,16);
// line color
g.setColor(Color.blue);
drawFunction(g,r);
}

private void drawGrid(Graphics g,Rectangle r,int w, int h)
{
for(int y = 0;y <= h;y++) {
int gy = ntrp(0,h,r.y,r.height,y);
g.drawLine(r.x,gy,r.width,gy);
}
for(int x = 0;x <= w;x++) {
int gx = ntrp(0,w,r.x,r.width,x);
g.drawLine(gx,r.y,gx,r.height);
}

}

private void drawFunction(Graphics g,Rectangle r)
{
boolean start = true;
double epsilon = .01;
double xa = -3.0;
double xb = 3.0;
int oldx = 0, oldy = 0;

for(double x = xa;x <= xb; x += epsilon)
{
// just a picturesque
// sample function
double y = Math.exp(-(x*x));
int gx = ntrp(xa,xb,r.x,r.width,x);
int gy = ntrp(0,1,r.height,r.y,y);
if(!start) {
g.drawLine(oldx,oldy,gx,gy);
}
oldx = gx;
oldy = gy;
start = false;
}

}

// interpolation routine
private int ntrp(double xa,double xb,int ya,int yb, double x)
{
return (int)((x-xa)/(xb-xa) * (yb-ya)) + ya;
}
}


Alle Zeitangaben in WEZ +2. Es ist jetzt 22:23 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
© 2009 FSL Verlag