Codul urmator permite desenarea unui grafice pe suprafata apletului.
import java.applet.*; import java.awt.*; public class Grafic extends Applet { int width, height, dim=333 //nr de puncte de pe grafic ,ixL,ixH,iyL,iyH, //limitele spatiului de desenare a graficului iy[]=new int[dim] //vector pentru valorile functiei pe axa Y ,ix[]=new int[dim];//vector analog pentru abscisa (X) int border=20;//dimensiunea ramei -> graficul se deseneaza in interior double y[]=new double[dim] //aici se calculeaza valorile functiei ,pi //variabila ce va memora valoarea PI ,yL,yH,xL,xH; //graficul apartine dreptunghilui [xL,xH]x[yL,yH] din planul R^2 public void init() { pi=Math.PI; //se alege intervalul in care se deseneaza functia [xL,xH] xL=0; xH=20*pi; ixL=border; iyL=border; //calculeaza valorile functiei in intervalul [xL,xH] calculeazaFunc(); //calculeaza intervalul in care functia ia valori [yL, yH] calculeazaLimite(); setBackground( Color.black );//fixeaza culoarea de fundal a apletului } //functia de desenat double func(double x){ return Math.sin(x)*Math.exp(-x/pi/6);//aici se poate modifica functia de desenat } public void calculeazaFunc(){ for(int i=0;i<dim;i++)y[i]=func(scaleaza(i,0,dim-1,xL,xH)); } public void calculeazaLimite(){ yL=y[0];yH=y[0]; for(int i=0;i<dim;i++){ if(y[i]<yL)yL=y[i]; if(y[i]>yH)yH=y[i]; } } //transforma liniar intervalul [xm,xM] in intervalul [ym,yM] public double scaleaza(double x,double xm,double xM,double ym,double yM){ return ym+(x-xm)*(yM-ym)/(xM-xm); } public void scaleazaY(){ for(int i=0;i<dim;i++) iy[i] = (int)(Math.round(scaleaza(y[i],yL,yH,iyH,iyL))); } public void scaleazaX(){ for(int i=0;i<dim;i++) ix[i] = (int)(Math.round(scaleaza(i,0,dim-1, ixL,ixH))); } public void update( Graphics g ) { g.setColor( Color.green ); width = getSize().width; height = getSize().height; ixH=width-border; iyH=height-border; scaleazaY(); scaleazaX(); for ( int i = 1; i < dim; ++i ) { g.drawLine( ix[i-1], iy[i-1], ix[i], iy[i]); } g.setColor( new Color(255,0,255) ); g.drawLine( ix[0], iy[0], ix[dim-1], iy[dim-1]); showStatus( "xL:"+Math.round(xL*1e4)/1e4+ " xH:"+Math.round(xH*1e4)/1e4+ " yL:"+Math.round(yL*1e4)/1e4+ " yH:"+Math.round(yH*1e4)/1e4); } public void paint( Graphics g ) { update(g); } }
Apasa aici pentru a vedea apletul in actiune.
© Cornel Mironel Niculae, 2004-2007
26-Jun-2007