Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Рисование графика ф-ии, builder c++ 6.0 (срочно) 
:(
    Опции темы
stmamont
  Дата 7.4.2005, 19:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Как нарисовать в определенном месте формы график функции.
Знаю что вопрос глупый. И даже предполагаю ответ, что через canvas.
Но как? можно какой нить пример или ссылку где про это можно почитать. Срочно!


--------------------
user posted image
PM MAIL ICQ   Вверх
Fixin
Дата 7.4.2005, 20:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ёжик
***


Профиль
Группа: Комодератор
Сообщений: 1357
Регистрация: 6.1.2004

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



Canvas->MoveTo(х, у)
Canvas->LineTo(х, у)

Этим и рисуй.
PM MAIL ICQ   Вверх
Бегемот
Дата 7.4.2005, 20:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 219
Регистрация: 26.1.2005
Где: На границе Европы и Азии

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



Ну вот примерно так.
Код

__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
}
/*==================================================================*/
void __fastcall TForm1::FormPaint(TObject *Sender)
{
    Grafik();
}
/*==============> Пользователь изменил размер окна <================*/
void __fastcall TForm1::FormResize(TObject *Sender)
{
    TRect rct = Rect(0,0,ClientWidth,ClientHeight);

    Canvas->FillRect(rct);
    Grafik();
}
/*==============> Функция, график которой надо построить <==========*/
float f( float x)
{
   return 2*sin(x)*exp(x/5);
}
/*==================================================================*/
void TForm1::Grafik()
{
 float x1, x2;   // границы изменения аргумента функции
 float y1, y2;   // границы изменения значения функции
 float x;        // аргумент функции
 float y;        // значение функции в точке x
 float dx;       // приращение аргумента
 int l,b;        // левый нижний угол области вывода графика
 int w, h;       // ширина и высота области вывода графика
 float mx, my;   // масштаб по осям X и Y
 int x0, y0;     // начало координат

 // область вывода графика
 l = 10;                      // X - координата левого верхнего угла
 b = Form1->ClientHeight-20;  // Y - координата левого нижнего угла
 h = Form1->ClientHeight-40;  // высота
 w = Form1->Width - 20;       // ширина

 x1 = 0;     // нижняя граница диапазона аргумента
 x2 = 25;    // верхняя граница диапазона аргумента
 dx = 0.01;  // шаг аргумента

 // найдём максимальное и минимальное значение функции на отрезке [x1,x2]
 x = x1;
 y1 = f(x); // минимум
 y2 = f(x); // максимум
 do
 {
   y =  f(x);
   if ( y < y1 ) y1 = y;
   if ( y > y2 ) y2 = y;
   x += dx;
 }
 while (x <= x2);

 // вычислим масштаб
 my = (float)h/abs(y2-y1);  // масштаб по оси Y
 mx = w/abs(x2-x1);         // масштаб по оси X

 // оси
 x0 = l+abs(x1*mx);
 y0 = b-abs(y1*my);
 Canvas->MoveTo(x0,b);Canvas->LineTo(x0,b-h);
 Canvas->MoveTo(l,y0);Canvas->LineTo(l+w,y0);
 Canvas->TextOutA(x0+5,b-h,FloatToStrF(y2,ffGeneral,6,3));
 Canvas->TextOutA(x0+5,b,FloatToStrF(y1,ffGeneral,6,3));

 // построение графика
 x = x1;
 do
 {
   y = f(x);
   Canvas->Pixels[x0+x*mx][y0-y*my] = clRed;
   x += dx;
 }
 while (x <= x2);
}

Функция Graphik() сначало вычисляет максимальное(y2) и минимальное(y1) значение функции на отрезке[x1,x2]. Затем вычисляет коэффициенты масштабирования по осям X и Y, используя информацию о ширине и высоте области вывода графика. После чего вычисляет координату Y горизонтальной оси, координату X вертикальной оси и вычерчивает координатные оси. Ну а затем выполняет непосредственное построение графика. Меняя инструкции в теле функции f(x), можно получить график другой функции.
Ну и не забудь(для моего примера)подключить"math.h" для доступа к sin и exp и объявить функцию Grafik() в разделе private объявления формы в заголовочном файле. smile
PM MAIL   Вверх
vudu91
Дата 9.5.2009, 14:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



а почему в меня ошыбка??? 
[C++ Error] Unit1.cpp(38): E2316 'TForm1::Grafik()' is not a member of 'TForm1'


M
dumb
Темы объединены


Это сообщение отредактировал(а) dumb - 10.5.2009, 02:19
PM MAIL   Вверх
Dmi3ev
Дата 9.5.2009, 15:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



vudu91, надо в в файле *.h этого юнита объявить свою функцию в public
Код

public:        // User declarations
        __fastcall TForm1(TComponent* Owner);
        void Grafik(); //во это ты должен написать, остальное не трогай (это для понимания, где писать)

Тогда все заработает...


--------------------

PM MAIL   Вверх
xvr
Дата 12.5.2009, 20:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

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



Рисуй в TChart

PM MAIL   Вверх
Dmi3ev
Дата 12.5.2009, 20:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



xvr, тема старая, это vudu91 тычется везде... 


--------------------

PM MAIL   Вверх
vudu91
Дата 14.5.2009, 17:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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





 smile 

Это сообщение отредактировал(а) vudu91 - 14.5.2009, 17:47
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


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

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


 




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


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

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