Grafice

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