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

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

30.10.2016, 17:28. Показов 3705. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Функция заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
10 пpимет, которые всегда сбываются
Maks 31.03.2026
1. Чтобы, наконец, пришла маршрутка, надо закурить. Если сигарета последняя, маршрутка придет еще до второй затяжки даже вопреки расписанию. 2. Нaдоели зима и снег? Не надо переезжать. Достаточно. . .
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 31.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO Апнулись до NET10. Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта так и в интерактивном режиме. из сложностей - чисто функциональный подход. Решил. . .
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2. Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники". В. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru