Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Построение графиков 
:(
    Опции темы
MadManx
Дата 5.12.2007, 01:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 1.11.2006

Репутация: нет
Всего: нет



Не могу понять как можно стандартным способом построить график функции , например, синуса
изучать джаву начал не так давно, поэтому прошу доходчиво объяснить.
PM MAIL   Вверх
ecologist
Дата 5.12.2007, 08:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 452
Регистрация: 28.2.2007

Репутация: 1
Всего: 9



Что значит "стандартными" ?

По идее в методе paintComponent той же JPanel нарисовать линии от одной точки к другой.

По идее надо найти максимальное и минимальное число и потом выводить точки с масштабированием.
PM MAIL   Вверх
ecologist
Дата 5.12.2007, 09:24 (ссылка) |   (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 452
Регистрация: 28.2.2007

Репутация: 1
Всего: 9



Наше время для примера smile

Код

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

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);
   }

   public static void main(String[] arg)
   {
      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;
      }
   }
}

PM MAIL   Вверх
Platon
Дата 5.12.2007, 23:02 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1801
Регистрация: 25.4.2006

Репутация: нет
Всего: 40



На самом деле я бы сделал 2 стандартных замечания по построению графика.
1-й, шаг не может быть фиксированным, он должен вычисляться в зависимости от ширины полотна. h = (rightLine - leftLine)/panelWidth
2-й, не стоит так фиксировано график присваивать к определенной функции, это не в стиле Java лучше сделать что-то вроде
Код

public interface GraphicFunction {
    public double func(double x);
}

public class SinFunction {
    public double func(double x) {
        return Math.sin(x);
    }
}

PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Апплеты | Следующая тема »


 




[ Время генерации скрипта: 0.0426 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.