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

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

06.12.2010, 18:55. Показов 20707. Ответов 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
3957 / 1812 / 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
3957 / 1812 / 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
3957 / 1812 / 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
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru