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

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

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

Студворк — интернет-сервис помощи студентам
Здравствуйте.
Вообщем, суть:
Надо нарисовать график функции по формуле 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
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
06.12.2010, 18:55
Ответы с готовыми решениями:

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

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

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

10
Эксперт С++
 Аватар для MikeSoft
3956 / 1811 / 184
Регистрация: 21.11.2009
Сообщений: 2,540
06.12.2010, 21:29
Diag, поместите на форму компонент класса TChart.
Двойным щелчком добавьте на него TSeries, а затем добавляйте значения уравнения с помощью метода AddXY.
На форуме неоднократно обсуждалась работа с данным компонентом.
0
0 / 0 / 0
Регистрация: 20.11.2010
Сообщений: 6
06.12.2010, 22:07  [ТС]
MikeSoft, спасибо, буду смотреть.
Не могли бы вы дать хоть пару ссылок на обсуждения этого компонента, а то тем тут очень много...
0
Эксперт С++
 Аватар для MikeSoft
3956 / 1811 / 184
Регистрация: 21.11.2009
Сообщений: 2,540
06.12.2010, 22:21
Diag, посмотрите вот эту тему: вопрос по свойствам TChart.
1
0 / 0 / 0
Регистрация: 20.11.2010
Сообщений: 6
06.12.2010, 22:40  [ТС]
А как отредактировать в графике ось Ох, чтобы её значение было от минус бесконечности до плюс бесконечности?
0
Эксперт С++
 Аватар для MikeSoft
3956 / 1811 / 184
Регистрация: 21.11.2009
Сообщений: 2,540
06.12.2010, 22:57
Diag, в компьютерном понимании отсутствует выражение "от плюс бесконечности до минус бесконечности".
Оставьте Min и Max в позиции Auto и график автоматически перерисуется, включая в себя отображение крайней левой и крайней правой точки.
0
0 / 0 / 0
Регистрация: 20.11.2010
Сообщений: 6
07.12.2010, 13:37  [ТС]
Diag, в компьютерном понимании отсутствует выражение "от плюс бесконечности до минус бесконечности".
Оставьте Min и Max в позиции Auto и график автоматически перерисуется, включая в себя отображение крайней левой и крайней правой точки.
Я уж извиняюсь за свою твердолобость, просто я в программировании пока == 0;.
У меня еще вопрос: в Chart'e я все настроил - оси, все как полагается. Хочу, чтобы по кнопке на форме хоть что нибудь нарисовалось. Что для этого надо? Если не трудно, можете привести какой-нибудь простенький пример?
0
4 / 4 / 0
Регистрация: 04.10.2010
Сообщений: 33
07.12.2010, 15:51
Что-то типа такого:
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  [ТС]
Что-то типа такого:
Я так полагаю, там, где написано Series2 - ошибка. И график на синус похож, чем на косинус - как-будто сместили влево. На значениях оси Ох между 9 и 10 график искажается

Как теперь сделать, чтобы график не останавливался на 0 оси икс, а шел дальше влево?
Можно как нибудь этот график скруглить, добавить больше точек?
И как сделать привязку к скроллбару (см. 1 пост)?
0
0 / 0 / 0
Регистрация: 20.11.2010
Сообщений: 6
08.12.2010, 18:21  [ТС]
Ладно, ребят... Хоть скажите, что в этом коде менять, чтобы подставить свои значения?
0
8 / 8 / 0
Регистрация: 14.10.2011
Сообщений: 118
23.02.2012, 03:36
попробуй вот так
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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
23.02.2012, 03:36
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка. Рецензия / Мнение/ Перевод Сайт называется reddit: The Thinkpad X220 Tablet is the best budget school laptop period. Это. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru