Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.97/98: Рейтинг темы: голосов - 98, средняя оценка - 4.97
0 / 0 / 0
Регистрация: 20.11.2010
Сообщений: 6
1

Построение графика функции.

06.12.2010, 18:55. Показов 20123. Ответов 10
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте.
Вообщем, суть:
Надо нарисовать график функции по формуле y = A*cos(a*x+b)+B.
Где:
1) A - сжатие/растяжение графика по оси Y;
2) B - перемещение графика по оси Y;
3) a - сжатие/растяжение по оси Х;
4) b - перемещение по оси Х;
Формула исходного состояния графика: y = cos(x); при A = a = 1, B = b = 0;
При этом, к каждой из переменных (A, a, B, b) нужно "привязать" ScrollBar, который менял бы её значение, тем самым изменяя нарисованный график.
Что имеем: С++ Builder 6.
С моим знанием языка смог только оси через Canvas нарисовать да и форму составить.
Вообщем, кому не трудно и есть желание - помогите с написанием.
Заранее спасибо.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.12.2010, 18:55
Ответы с готовыми решениями:

Построение графика не функции
Здравствуйте. Пишу программу для анализа файлов системного монитора. Загружаю содержимое файла в...

Построение графика функции
Нужно построить график квадратичной функции. С математикой нет проблем. Проблема в том, что я С++...

Построение графика функции (canvas)
Как построить функцию fabs(sin(x))+fabs(cos(x)) используя метод Canvas? Никак не могу реализовать...

Построение графика заданной функции на канве
Суть вопроса, не знаю как построить график (без координатной оси), на Image->Canvas, по заданному...

10
Эксперт С++
3953 / 1808 / 184
Регистрация: 21.11.2009
Сообщений: 2,540
06.12.2010, 21:29 2
Diag, поместите на форму компонент класса TChart.
Двойным щелчком добавьте на него TSeries, а затем добавляйте значения уравнения с помощью метода AddXY.
На форуме неоднократно обсуждалась работа с данным компонентом.
0
0 / 0 / 0
Регистрация: 20.11.2010
Сообщений: 6
06.12.2010, 22:07  [ТС] 3
MikeSoft, спасибо, буду смотреть.
Не могли бы вы дать хоть пару ссылок на обсуждения этого компонента, а то тем тут очень много...
0
Эксперт С++
3953 / 1808 / 184
Регистрация: 21.11.2009
Сообщений: 2,540
06.12.2010, 22:21 4
Diag, посмотрите вот эту тему: вопрос по свойствам TChart.
1
0 / 0 / 0
Регистрация: 20.11.2010
Сообщений: 6
06.12.2010, 22:40  [ТС] 5
А как отредактировать в графике ось Ох, чтобы её значение было от минус бесконечности до плюс бесконечности?
0
Эксперт С++
3953 / 1808 / 184
Регистрация: 21.11.2009
Сообщений: 2,540
06.12.2010, 22:57 6
Diag, в компьютерном понимании отсутствует выражение "от плюс бесконечности до минус бесконечности".
Оставьте Min и Max в позиции Auto и график автоматически перерисуется, включая в себя отображение крайней левой и крайней правой точки.
0
0 / 0 / 0
Регистрация: 20.11.2010
Сообщений: 6
07.12.2010, 13:37  [ТС] 7
Diag, в компьютерном понимании отсутствует выражение "от плюс бесконечности до минус бесконечности".
Оставьте Min и Max в позиции Auto и график автоматически перерисуется, включая в себя отображение крайней левой и крайней правой точки.
Я уж извиняюсь за свою твердолобость, просто я в программировании пока == 0;.
У меня еще вопрос: в Chart'e я все настроил - оси, все как полагается. Хочу, чтобы по кнопке на форме хоть что нибудь нарисовалось. Что для этого надо? Если не трудно, можете привести какой-нибудь простенький пример?
0
4 / 4 / 0
Регистрация: 04.10.2010
Сообщений: 33
07.12.2010, 15:51 8
Что-то типа такого:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
Series1->LinePen->Width = 5; Series1->SeriesColor = clRed;
}
void __fastcall TForm1::Button1Click(TObject *Sender)
 {
   Series1->Clear();
   float abscissa[11], ordinata[11];
   abscissa[0]=0.0f;
   for( int i = 0; i <= 10; i++)
   {
   ordinata[i]=3.0f+abscissa[i];
   abscissa[i]=abscissa[i]+10.0f;
   Series1->AddXY(abscissa[i], ordinata[i]);
   }
   for( int i = 0; i <= 255; i++)
   {
   Series2->AddXY(i, cos((float)i * M_PI_2 ) * 100);
   }
}
1
0 / 0 / 0
Регистрация: 20.11.2010
Сообщений: 6
07.12.2010, 18:02  [ТС] 9
Что-то типа такого:
Я так полагаю, там, где написано Series2 - ошибка. И график на синус похож, чем на косинус - как-будто сместили влево. На значениях оси Ох между 9 и 10 график искажается

Как теперь сделать, чтобы график не останавливался на 0 оси икс, а шел дальше влево?
Можно как нибудь этот график скруглить, добавить больше точек?
И как сделать привязку к скроллбару (см. 1 пост)?
0
0 / 0 / 0
Регистрация: 20.11.2010
Сообщений: 6
08.12.2010, 18:21  [ТС] 10
Ладно, ребят... Хоть скажите, что в этом коде менять, чтобы подставить свои значения?
0
8 / 8 / 0
Регистрация: 14.10.2011
Сообщений: 118
23.02.2012, 03:36 11
попробуй вот так
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
// циклически рассчитываем максимальное и минимальное
// значения Y 
 for (X=Xmin;X<=Xmax;X+=dX)
  {
   Y=a*sin(X)+k;
   if(Ymax<Y) Ymax=Y;
   if(Ymin>Y) Ymin=Y;
  }
 
// рассчитываем масштаб по оси Y
MasY=(LY-40)/(Ymax-Ymin);
 
// выводим «промасштабированные» значения возле оси Y
// для обозначения уже нарисованных дополнительных линий
  float B[11];
 for (i=0;i<=10;i++)
{
 B[i]=50+LY/11*i;
 AnsiString S = FloatToStrF(Ymax-((Ymax-Ymin)/10)*i,ffFixed,5,2);
 Image1->Canvas->TextOutA(20,B[i]-15,S);
}
 
//помещаем курсора (карандаш) в нужную точку на 
// объекте Image
 Image1->Canvas->MoveTo(50,LY-(Ymin*(-1)+a*sin(Xmin))*MasY);
 
// рисуем график
 for (X=Xmin;X<=Xmax;X+=dX)
  {
   Y=a*sin(X);
 
 PY=LY-(Ymin*(-1)+Y)*MasY;
       PX=X*MasX+50;
   Image1->Canvas->LineTo(PX-Xmin*MasX,PY);
Добавлено через 2 минуты
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
// циклически рассчитываем максимальное и минимальное
// значения Y 
 for (X=Xmin;X<=Xmax;X+=dX)
  {
   Y=a*sin(X)+k;
   if(Ymax<Y) Ymax=Y;
   if(Ymin>Y) Ymin=Y;
  }
 
// рассчитываем масштаб по оси Y
MasY=(LY-40)/(Ymax-Ymin);
 
// выводим «промасштабированные» значения возле оси Y
// для обозначения уже нарисованных дополнительных линий
  float B[11];
 for (i=0;i<=10;i++)
{
 B[i]=50+LY/11*i;
 AnsiString S = FloatToStrF(Ymax-((Ymax-Ymin)/10)*i,ffFixed,5,2);
 Image1->Canvas->TextOutA(20,B[i]-15,S);
}
 
//помещаем курсора (карандаш) в нужную точку на 
// объекте Image
 Image1->Canvas->MoveTo(50,LY-(Ymin*(-1)+a*sin(Xmin))*MasY);
 
// рисуем график
 for (X=Xmin;X<=Xmax;X+=dX)
  {
   Y=a*sin(X);
 
 PY=LY-(Ymin*(-1)+Y)*MasY;
       PX=X*MasX+50;
   Image1->Canvas->LineTo(PX-Xmin*MasX,PY);
1
23.02.2012, 03:36
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.02.2012, 03:36
Помогаю со студенческими работами здесь

Построение графика функции на заданном интервале
Помогите с Программой!!!!!! Разработать программу построения графика функции y=f(x) на...

Построение графика функции в компоненте TChart
Здраствуйте. Мне нужна помощь в построении графика y=sin(x), а точнее сама функция для TChart

Построение графика функции при нажатии кнопки (OnButtonClick)
Здравствуйте ТОВАРИЩИ ФОРУМЧАНИ. Хочу обратиться к Вам как к профессионалам в данном форуме....

Построение графика графика квадратичной функции
Как построить график квадратичной функции? Построил только простую параболу, как ее сдвигать? ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru