Вступление
Примеры Словарь Вопросы

Sun Microsystems

Примеры программирования на Java

График
(func.java)

Описание апплета
Пример работы апплета
import java.applet.*;
import java.awt.*;

//========================================
	class Coordinate
// Для начала в программе объявляется новый класс Coordinate,
//  который  содержит координаты x и y. Используя обьекты класса Coordinate,
// можно хранить координаты объекта. Функция-конструктор класса использует 
// значения его параметров для ввода переменных координат:
	 {
	   public int x;
	   public int y;
	   
	    public Coordinate(int x, int y)
	    
	     { 
// Параметры функции-конструктора тоже называются х и у, как и переменные- 
// члены класса. Для различия между ними используется ключевое слово this.
// Функцию-конструктор можно было бы описать и так:
//  public Coordinate(int a, int b)
//           {
//            x = a;
// 	      y = b;
//	     }

	     this.x = x;
	     this.y = y;
	     }
	 }
//============================================

	public class Graphica extends Applet implements Runnable
 // Создается класс, который будет потомком класса Applet. 
 // Класс Graphica будет использовать потоки, поэтому используется 
 // интерфейс Runnable, который говорит компилятору, что класс
 // Graphica содержит функцию run
 
	{
	  Graphics g;
	 
	  Color bgColor;	    // Цвет фона
 	   
	  int total = 30; // Число точек, в которых высчитывается значение 
	  		   // функции
	  
	  int X = 20;	  // Задание положения 
	  int Y = 100;	  // центра координат
	  int T = 0;	  // Начальный момент времени равен нулю
	  int grad = 3;  // Шаг расчета(число градусов, через которое вычис-
	     		  // ляется значение функции)
	  int zoom = 40;  //  Масштабный коэффициент
	  Coordinate coordinate[];
	  
//==================================
 public void init()
 
 	{
 	  g = getGraphics();
 	  // Установка шрифта для вывода текста
 	  Font font = new Font("TimesRoman", Font.BOLD, 7);
 	  g.setFont(font);
 	  
 	  bgColor = new Color(255,255,255);
 	  setBackground(bgColor);
 	  
 	  // Вызов основной функции программы, в  которой идет расчет 
 	  // заданного графика (определение его координат)
 	  get_coordinates(); 
 
 	}
 	
//==============================
// Поскольку в программе строится график функции от двух переменных,
// под одной из которых подразумевается время, то без использования 
// потоков не обойтись

	public void start()
	
	{
	   (new Thread(this)).start();
	}


//=====================================

  public void run()
    {
      while (true)
        
        {
           
           get_coordinates();
           
           T++;            
           if (T > 4*(total))
            T = 0;
           repaint();
           
         
           try
              {
                Thread.sleep(100);
              }
            catch (InterruptedException e)
              {
              }
         
           }
           
           
     }  
             
             
                

//=======================================
 	void get_coordinates()
 	
 	{
 	  //Ввыделение памяти под массив координат 
 	   coordinate = new Coordinate[total];
 	
 	  
 	   for (int i = 0 ; i < total; i++)
 	     {
 	       
 	       
 	       //System.out.println("x="+i);  Вывод информации при 
 	       //System.out.println("y="+f(i)); отладке программы 
 	       
 	       //Расчет местоположения точки функции  в графическом 
 	       // окне 
 	       int y = Y - f(i*4); 
 	       int x = X + i*8;
 	       // Заполнение массива 
 	       coordinate[i] = new Coordinate(x,y);
 	     }	       
 	  
 	}
 	
//=============================================================
   int f(int p) // Заданная функция  y=sin(x-T)
   
    { 
      
       double rad = grad*p*Math.PI/180; // Пересчет градусов в радианы
       double P = zoom*Math.sin(rad - (grad*Math.PI/180)*T) ;
       int PP = (int) P; // Преобразование типов double --> int 
       return PP;
       
     }
//=============================================================

   public void paint(Graphics g)
   
   	{
   	 g.drawLine(X,5,X,150); // Рисование 
   	 g.drawLine(X,Y,280,Y); // осей координат
   	 for ( int i = 0; i < 13; i++) // Разбиение оси Х 
   	   {
   	   g.drawLine(X+i*20,Y-5,X+i*20,Y+5);
   	   g.drawString(""+i,X+i*20,Y+15);
   	   }
   	   
   	   g.drawString("Y",25,20);
   	   g.drawString("X",280,Y+15);
   	   
   	   g.setColor(Color.green);// Установка цвета графика 
   	  //Вывод итогового графика функции 
   	  for ( int i = 0; i < (total-1); i++)
   	  g.drawLine(coordinate[i].x, coordinate[i].y, coordinate[i+1].x, coordinate[i+1].y);
   	}
   	
 //===============================================================
 
 }