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

Построение графика в программе C++ Builder 6

30.10.2016, 17:28. Показов 3629. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть задание написать код программы интерполяции и что бы в итоге показало 2D график на плоскости которого находятся точки, а через них проходит линия. Типа такого что на рисунке. Код есть, а вот как правильно в самом Builder 6? Вроде создаю новый Application, там вставляю код программы, в Form1 создаю график который ждет только кода программы. Но все время при компиляции выбивает ошибки и т.д. Не могу понять в чем проблема и что не так делаю. В Builder 6 только начинаю работать.
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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
#include <iostream> 
#include <stdio.h>  
float x[6] = {1.5, 1.54, 1.56, 1.60,1.63, 1.70}; 
float y[6] = {3.873,3.924,3.950,4.00,4.037,4.123}; 
 
float L(float xp,int n,int i) 
{ 
 
float Chesl; 
float Znam; 
 
Chesl = 1; Znam = 1; 
 
int k; 
 
for (k = 0; k!= n; k++ ) 
{ 
 
if ( k == i ) continue; 
 
Chesl *= xp - x[k]; 
} 
 
for(k= 0; k!= n;k++) 
{ 
 
if (x[i] == x[k]) continue; 
 
 
Znam *= x[i] - x[k]; 
} 
 
 
return Chesl/Znam; 
 
} 
int main(int argc, char* argv[]) 
{ 
 
 
int n = sizeof(y)/sizeof(float); 
 
float R = 0; 
 
 
float px = 1.55; 
 
 
for (int i = 0; i != n; i++) { 
 
R += y[i]*L(px,n,i); 
} 
 
printf("Результат : %f ",R); 
 
// вывод результата 
return 0; 
}
Миниатюры
Построение графика в программе C++ Builder 6  
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
30.10.2016, 17:28
Ответы с готовыми решениями:

Построение графика в С++ builder
Всем привет, не могу найти нормальный источник откуда научиться строить самые простые графики. У меня есть известные мне точки по которым...

Построение графика в Builder
Доброго времени суток. В общем задача: есть массив данных x и массив данных y. Эти массивы должны заполняться из окна программы(как это...

Построение графика производной для каждого графика из 3 режимов
Дорогие друзья, прошу помочь доделать три программы. В каждой программе выводится по одному графику и нужно чтобы каждая программа выводила...

9
188 / 41 / 12
Регистрация: 22.02.2016
Сообщений: 149
31.10.2016, 17:50
Для того чтобы нарисовать график Вам нужны как минимум координаты точек в координатах (x, y)
Из сказанного Вами имеется только массив входных точек. И некоторое значение величины R. По каким значениям график строить?
Как вариант, вот реализация вычерчивание графика по вашим исходным данным
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
  int cnt=sizeof(y)/sizeof(float);
  float ScaleX=500;
  float ScaleY=100;
  for(int i=0; i<cnt; i++)
  {
    float px=x[i]*ScaleX;
    float py=y[i]*ScaleY;
    if(i)
      Canvas->LineTo(px, py);
    else
      Canvas->MoveTo(px, py);
    Canvas->Ellipse(px-2, py-2, px+3, py+3);
  }
В коде используются масштабные коэффициенты для наглядности результата. По умолчанию положительное направление оси Y вниз, а ноль находится в левом верхнем углу
Миниатюры
Построение графика в программе C++ Builder 6  
0
0 / 0 / 0
Регистрация: 22.09.2015
Сообщений: 10
02.11.2016, 23:15  [ТС]
График с рандомными точками с исключением того, что должна выйти интерполяция, примерно в таком формате периодичности как на рисунке. Даже что то типа построение графика по примеру заданной функции.
Изображения
 
0
188 / 41 / 12
Регистрация: 22.02.2016
Сообщений: 149
02.11.2016, 23:28
Проблема не в том чтобы нарисовать график, а в том, откуда получить исходные данные для его вычерчивания. Покажите в Вашем коде, где формируются координаты точек результирующей функции? Исходя из Вашего кода, по одному значению R сложно получить то, что Вы хотите.
0
132 / 158 / 87
Регистрация: 06.04.2016
Сообщений: 992
03.11.2016, 07:49
Цитата Сообщение от Death_angel Посмотреть сообщение
в Form1 создаю график который ждет только кода программы.
- график можно не создавать, а рисовать прямо на канве формы.

Добавлено через 9 минут
Цитата Сообщение от dstar Посмотреть сообщение
Canvas->Ellipse(px-2, py-2, px+3, py+3);
- а схитрил, эллипсом решил нарисовать! По-моему кривые Безье строятся по точкам.
0
0 / 0 / 0
Регистрация: 22.09.2015
Сообщений: 10
03.11.2016, 08:32  [ТС]
В том то и дело, раньше с графиками работы не предстояло, хотелось уточнить как правильно мне написать код и следовать следующим действиям для построения в этой программе С++ Builder 6. Раньше в Visual studio писались коды, но получения результата только через командную строчку, в Builder тоже только через команд. строчку. Здесь уже усталось дает свое, не могу до конца довести это построение графика (написать верный код по нему).
0
132 / 158 / 87
Регистрация: 06.04.2016
Сообщений: 992
03.11.2016, 09:47
А где в Вашем коде расчет точек кривой Безье? Просто какое-то R считаете и все, ищите и дальше код рисования кривой Безье!

Добавлено через 22 минуты
Вон хорошая статься про кривые Безье:
http://www.cyberguru.ru/algori... ezier.html
Что такое функция Bernstein()?
0
0 / 0 / 0
Регистрация: 22.09.2015
Сообщений: 10
03.11.2016, 10:43  [ТС]
У меня задача не конкретно кривая Безье, а именно написание и вывод графика кривой по точкам - Интерполяция.
0
132 / 158 / 87
Регистрация: 06.04.2016
Сообщений: 992
03.11.2016, 10:58
А-ха-ха-ха!!!!!
У меня получилось!!!!!
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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
//---------------------------------------------------------------------------
#include <vcl.h>
#include <iostream>
#include <stdio.h>
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//+++++++++++++++++++++++++++++++++++++++++++++++++++++
//Íàðèñîâàòü êðèâóþ Áåçüå
//R(t) = P0*(1-t)^3 + P1 * t * (1-t)^2 + P2 * t^2 * (1-t) + P3 * t^3 ,
//     ãäå 0<=t<=1
//P0,P2 - îïîðíûå òî÷èê
//P1,P3 -  óïðàâëÿþùèå òî÷êè
void DrawBezier(TImage *Image,int x0,int y0,int x,int y,int x1,int y1,int Count)
{
TPoint points[900];  //Ìàññèâ òî÷åê äëÿ ïîëèãîíà
//Extended - long double
Extended Step = 1.0/Extended(x1-x0);  //Øàã èçìåíåíèÿ ïàðàìåòðà t
Count = 0;
 
for(int i = x0; i < x1 && i-x0 < 900; i++)
{
Extended t = Extended(i-x0)*Step; //Î÷åðåäíîå çíà÷åíèå ïàðàìåòðà t
//Ñîáñòâåííî ðàñ÷åò êîîðäèíàò î÷åðåäíîé òî÷êè äëÿ 2D
//Ýòî ñ÷èòàþòñÿ êîýôôèöèåíòû q1,q2,q3,q4
Extended q1 = t*t*t*-1 + t*t*3 + t*(-3) + 1;
Extended q2 = t*t*t*3 + t*t*(-6) + t*3;
Extended q3 = t*t*t*(-3) + t*t*3;
Extended q4 = t*t*t;
//Çäåñü ïîäñòàâëÿþòñÿ êîîðäèíàòû îïîðíûõ òî÷åê
Extended qx = q1*x0 + q2*x + q3*x + q4*x1;
 
//äëÿ q2 è q3 îäèíàêîâûå x,y, ýòî äëÿ ñîâìåùåíèÿ äâóõ ñðåäíèõ òî÷åê
Extended qy = q1*y0 + q2*y + q3*y + q4*y1;
points[i-x0].x = qx ;
points[i-x0].y = qy ;
//Æèâîé ïîäñò÷åò êîëè÷åñòâà òî÷åê â ïîëèãîíå
//(íåêîòîðûå ìîãóò âû÷èñëèòü åãî äî öèêëà)
Count++;
}
 
//Î÷èñòêà ïëîùàäè äëÿ ðèñîâàíèÿ
Image->Canvas->Brush->Color= clWhite ;
Image->Canvas->FillRect(Rect(0,0,Image->Width,Image->Height));
Image->Canvas->Brush->Color= clRed ;
Image->Canvas->Pen->Color= clBlack ;
//Çàìûêàåì ïîëèãîí
points[Count].x = points[0].x ;
points[Count].y = points[0].y ;
Polyline(Image->Canvas->Handle,points,Count+1);
//È ÂÎÒ ÎÍÀ ÊÐÈÂÀß ÁÅÇÜÅ, ÊÐÀÑÍÀß ÒÀÊÀß
//à çàîäíî è ïðîâåðêà ïîïàäàíèÿ x, y â åå òåëî
 
HRGN Rgn;
//Ñîçäàòü ðåãèîí èç òî÷åê
if((Rgn = CreatePolygonRgn(points, Count, WINDING))!=NULL)
{
//Ïðîâåðèòü ïîïàäèíèå òî÷êè â ðåãèîí
if(PtInRegion(Rgn,x,y))
  Form1->Label1->Caption= "Ìûøêà â íîðêå.";
 
else
  Form1->Label1->Caption= "";
PaintRgn(Image->Canvas->Handle,Rgn);   //Îòîáðàçèòü ðåãèîí
DeleteObject(Rgn);  //Óäàëèòü ðåãèîí
}
//Íàðèñîâàòü 2 ïðÿìûå èç êðàéíèõ òî÷åê â òî÷êó x,y äëÿ ýôôåêòà
Image->Canvas->Pen->Color = clRed;
Image->Canvas->MoveTo(x0,y0);
Image->Canvas->LineTo(x,y);
Image->Canvas->Pen->Color = clBlue;
Image->Canvas->MoveTo(x1,y1);
Image->Canvas->LineTo(x,y);
}
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner):TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
//void DrawBezier(TImage *Image,int x0,int y0,int x,int y,int x1,int y1,int Count)
DrawBezier(Image1, 100, 200, 200, 100, 300, 200, 4);
Timer1->Enabled = false;
}
//---------------------------------------------------------------------------
Добавлено через 53 секунды
Цитата Сообщение от Death_angel Посмотреть сообщение
У меня задача не конкретно кривая Безье, а именно написание и вывод графика кривой по точкам - Интерполяция.
- это тоже самое.
0
0 / 0 / 0
Регистрация: 22.09.2015
Сообщений: 10
03.11.2016, 11:31  [ТС]
Немного комментарии в коде не понятны
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
03.11.2016, 11:31
Помогаю со студенческими работами здесь

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

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

Графика Си. Построение графика функции
Построить график функции y=2x^3 - 4x и y=(sin x)^3+(cos x)^2 +1 на промежутке с шагом разбиения h=0,02

Графика в С++ Builder
С графикой в Билдере почти не работал, а тут вот необходимость такая. В общем смысл заключается в поле с координатными осями, только...

Графика в с++ builder
Нужно нарисовать степлер при помощи обычных фигур и линий безье и залить каким нибудь цветом... Нужна помощь.. Зараннее спасибо!


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Ниже машинный перевод статьи The Thinkpad X220 Tablet is the best budget school laptop period . Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы,. . .
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