Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Построение графика функции  (Прочитано 24089 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Folly
Гость
« : 18-03-2009 17:46 » 

есть 2 кода
1 - рассчитывает значение функции y=1/2*sin(x)+5, где х={1,2,3,4,5,6,7,8,9,10}
Код:
public class Function       
{     
 public static void main(String [] args)   
 {   
   int [] x = new int [10];   
   double [] y = new double [10];   
   for(int i = 0; i < x.length; i++)   
  {   
   x [i] = i + 1;   
   y [i] = 1.0/2.0 * Math.sin(x[i]) + 5;   
   System.out.println("x = " + x [i] + " y = " + y [i]);   
  }   
  System.out.println(Arrays.toString(y));   
 }   
}

2 - строит график функции, но не y=1/2*sin(x)+5, а другой, но тоже с синусом.
Код:
import java.awt.Color;
import java.awt.Graphics;
import java.util.Iterator;
import java.util.Vector;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class TG extends JFrame {
    private GraphPanel g;

   public TG()
   {
       Vector<Double> d = new Vector<Double>();

      // Заполняем вектор данными - например для функции
      double t = 0;
      while(t<=2*Math.PI) {
        double s = Math.sin(t);
        d.add(new Double(s));
        t += 0.1;
      }

      g = new GraphPanel(d);
      getContentPane().add(g);
      setBounds(100, 100, 300, 300);
   }
    /** Creates a new instance of TG */
   
   
    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
       TG t = new TG();
      t.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      t.setVisible(true);
    }
   
}
class GraphPanel extends JPanel
{
   private Vector<Double> data;

   public GraphPanel(Vector<Double> data)
   {
      this.data = data;
   }

   public void paintComponent(Graphics g)
   {
      super.paintComponent(g);

      // максимальная ширина графика - 2*PI
      // максимальная высота = 1, минимальная = -1
      // Вычисляем коэффициенты

      double Kx = getWidth()/(2*Math.PI);
      double Ky = getHeight()/2.0;

      double xo = -1;
      double yo = -1;

      double x = 0;
      for(Iterator<Double> it=data.iterator(); it.hasNext(); ) {
         double y = it.next().doubleValue();

         // Рисование начинаем для второй точки
         if(xo>=0.0) {
            int x1 = (int) (xo*Kx);
            int x2 = (int) (x*Kx);
            // Учитываем, что координаты идут сверху вниз и максимальное число = 1
            int y1 = (int) (getHeight()-(yo+1)*Ky);
            int y2 = (int) (getHeight()-(y+1)*Ky);
            g.drawLine(x1, y1, x2, y2);
         }
         
         xo = x;
         yo = y;
         x += 0.1;
      }
   }
}
У меня никак не получается построить график моей функции, не могу совместить коды... помогите пожалуйста исправить код. это мой первый опыт работы с апплетами... заранее огромное спасибо.

Записан
Folly
Гость
« Ответ #1 : 19-03-2009 09:22 » 

Всё сделано. тема может быть закрыта )))
Записан
String555
Новенький

ee
Offline Offline

« Ответ #2 : 25-01-2011 08:51 » 

Помогите нарисовать пожалуйста график.

Нарисовать график sin и  cos , если дано поле 1000х1000 и координаты 0<x<1 & 0<y<1 . Использовать g.drawLine , Math.sin(x) , Math.cos(x) , g.setColor(color.xyz) . Фактически начала координат 0 – 0 , конец координат 1 соответствует 1000 . вроде как-то так.


public  void paintComponent(graphics g) {

}

Хотя бы примерно, пусть даже если не работает, но алгоритм правильный. Спасибо!
Записан
Falsehood
Молодой специалист

ru
Offline Offline
Пол: Женский
не может быть


« Ответ #3 : 25-01-2011 09:15 » 

String555, я бы для начала использовала метод drawPolyline (http://download.oracle.com/javase/1.4.2/docs/api/java/awt/Graphics.html#drawPolyline(int[], int[], int)).
выбрала бы шаг для х, в цикле по х вычисляла бы у, собрала бы в массивы значания х и у и передала бы в метод drawPolyline().
Записан

Славная трава...
Вад
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #4 : 25-01-2011 09:51 » new

Falsehood, похоже, у String555 так учебное задание сформулировано. Вот только не вижу у спрашивающего попыток что-то сделать.

String555, что показывать-то, как методы вызывать?
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines