Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
308 / 61 / 12
Регистрация: 21.12.2011
Сообщений: 290

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

31.05.2013, 13:00. Показов 1675. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
В общем на форме должен строиться график функций x=a*t*t*t+b*t и y=c*t*t
Есть похожий у меня исходник, но с 1 функцией y зависящей от x.
Пробовал исправить - но не корректно рисует...
Хотел на Image рисовать.. Но не допер как оси координат на нем рисовать... Хотя и на форме думаю нормально будет рисовать..
Закоментировал строки, которые были в похожем исходнике
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
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
#include <vcl.h>
#include <math.h>
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
 
bool proverka=true;
////////////////////////
 
  //масштаб
const double size = 15;
 
double getX(double x)
{
    double w = Form1->Width;
    return  w/1.5 + x * size;
}
 
double getY(double y)
{
    double h = Form1->Height;
    return h/1.98 + y * size;
}
 
 
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner):TForm(Owner)
{
    Edit1->Text = -10;
    Edit2->Text = 10;
    Edit3->Text = -10;
    Edit4->Text = 10;
    Edit5->Text = -1;
    Edit6->Text = 1;
        Edit7->Text = -1;
        Edit8->Text = 0;
        Edit9->Text = 1;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    //// Проверка, что лист чист
   if(proverka == false)
   {
        MessageBox(0 ,"Очистите, перед тем как нарисовать", "Ошибка"  ,MB_OK);
        return;
   }
   // Проверка на заполненость полей
   for(int i=0; i<Form1->ComponentCount; i++)
   {
      if(dynamic_cast<TEdit*>(Components[i]))
          {
         TEdit* Te = (TEdit*)Components[i];
         if(Te->Text == "")
                 {
           MessageBox(0 ,"Не заполнено одно из полей", "Ошибка"  ,MB_OK);
           Te->SetFocus();
           return;
           }
         }
      }
 
    int l = -10;
    int r = +10;
    int t = +10;
    int d = -10;
    //основная сетка
    Form1->Canvas->MoveTo(getX(l), getY(0));
    Form1->Canvas->LineTo(getX(r), getY(0));
    Form1->Canvas->MoveTo(getX(0), getY(d));
    Form1->Canvas->LineTo(getX(0), getY(t));
    //деления
    for (int i = l; i <= r; i++)
    {
        Form1->Canvas->MoveTo(getX(i), getY(-0.2));
        Form1->Canvas->LineTo(getX(i), getY(+0.2));
    }
    for (int i = d; i <= t; i++)
    {
        Form1->Canvas->MoveTo(getX(-0.2), getY(i));
        Form1->Canvas->LineTo(getX(+0.2), getY(i));
    }
    Form1->Canvas ->Pen->Width =3;
    Form1->Canvas ->Pen->Color = RGB(255,0,0);
    double Xmin = StrToFloat(Edit1->Text);
    double Ymin = StrToFloat(Edit3->Text);
    double Xmax = StrToFloat(Edit2->Text);
    double Ymax = StrToFloat(Edit4->Text);
        double tmin = StrToFloat(Edit5->Text);
        double tmax = StrToFloat(Edit6->Text);
    double a = StrToFloat(Edit7->Text);
    double b = StrToFloat(Edit8->Text);
        double c = StrToFloat(Edit9->Text);
    double x,y,raz;
    //Нахождение наибольшей по модулю границы
    raz= (abs(Xmax) > abs(Ymax)) ?  abs(Xmax) :  abs(Ymax);
    raz= (raz > abs(Xmin)) ?  raz :  abs(Xmin);
    raz= (raz > abs(Ymin)) ?  raz :  abs(Ymin);
    raz = 10/raz;
    bool ch;
    int u=15;
    int H=8;
    double s=0.001;
    double X, Y,X1,Y1;
    for(x=Xmin; x<=Xmax; x=x+s)
    {
        if( (x > -0.0001) && (x < 0.0001) )//если закоментить этот цикл if() до if(ch), то не будет виснуть
            x=0;
        if( (((x-a) < 0.0001) && ((x-a) > -0.0001) ) || (((x-b) < 0.0001) && ((x-b) > -0.0001 ))  )
             ch =false;
        else
            ch = true;
        if(ch)
        {
                        for(int t=tmin; t<=tmax; t++)
                        {
                    X = 2*H- raz*(a*t*t*t+b*t);//X = raz * x+4*H;
                    Y = 2*H- raz*(c*t*t) ;//Y =2*H- raz*(x+1)/((x-a)*(x-b));
                    X1 = 2*H- raz*(a*t*t*t+b*t-s);//X1 = raz*(x-s)+4*H;
                    Y1 = 2*H- raz*(c*t*t-s);//Y1 = 2*H- raz*(x+1-s)/((x-s-a)*(x-s-b));
                    y = (c*t*t);
                                x =  (a*t*t*t+b*t);
                    if(y <Ymax &&  y>Ymin )
                    {
                        Form1->Canvas->MoveTo(u*X1,u*Y1);
                        Form1->Canvas->LineTo(u*X,u*Y);
                    }
                        }
        }
        else
        {
            x=x+s;
            X = x+H;
            Y = (H- (c*t*t))+H;//Y = (H- (x+1)/((x-a)*(x-b)))+H;
            Form1->Canvas->MoveTo(u*X,(u*Y));
        }
    }
    Form1->Canvas ->Pen->Width =1;
    Form1->Canvas ->Pen->Color = RGB(0,0,0);
    proverka = false;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
       Repaint();
       proverka = true;
}
//---------------------------------------------------------------------------
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
//---------------------------------------------------------------------------
 
#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <ExtCtrls.hpp>
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published:    // IDE-managed Components
        TEdit *Edit1;
        TEdit *Edit2;
        TEdit *Edit3;
        TEdit *Edit4;
        TEdit *Edit5;
        TEdit *Edit6;
        TButton *Button1;
        TButton *Button2;
        TLabel *Label1;
        TLabel *Label2;
        TLabel *Label3;
        TLabel *Label4;
        TLabel *Label5;
        TLabel *Label6;
        TEdit *Edit7;
        TEdit *Edit8;
        TEdit *Edit9;
        TLabel *Label7;
        TLabel *Label8;
        TLabel *Label9;
        TLabel *Label10;
        void __fastcall Button1Click(TObject *Sender);
        void __fastcall Button2Click(TObject *Sender);
private:    // User declarations
public:     // User declarations
        __fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif
rgzz.rar
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
31.05.2013, 13:00
Ответы с готовыми решениями:

Построение графика
Доброго времени суток, исправьте пожалуйста ошибки кому не сложно ...

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

Построение графика с++
Нужно построить нрафик квадратичной функции на с++ в Embarcadero. Прото 1й раз столкнусля с этим даже не представляю как тут строить...

3
308 / 61 / 12
Регистрация: 21.12.2011
Сообщений: 290
31.05.2013, 15:15  [ТС]
Или проще будет на Chart'е сделать?

Добавлено через 1 час 39 минут
Тему можно стереть, ибо начал делать на Chart'е
0
 Аватар для Dinkin
783 / 556 / 136
Регистрация: 31.05.2013
Сообщений: 3,145
Записей в блоге: 3
31.05.2013, 15:40
поддерживаю про компонент Chart, более скажу что в нем есть возможность задавать свои функции и часть уже готовых
0
308 / 61 / 12
Регистрация: 21.12.2011
Сообщений: 290
31.05.2013, 16:58  [ТС]
Переделал под Chart - по сравнению с рисованием отрезков - небо и земля)
Кому интересен код, то он ниже...
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
//---------------------------------------------------------------------------
 
#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <Chart.hpp>
#include <ExtCtrls.hpp>
#include <TeEngine.hpp>
#include <TeeProcs.hpp>
#include <Series.hpp>
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published:    // IDE-managed Components
        TLabel *Label1;
        TEdit *Edit1;
        TLabel *Label2;
        TEdit *Edit2;
        TLabel *Label3;
        TEdit *Edit3;
        TLabel *Label4;
        TEdit *Edit4;
        TLabel *Label5;
        TEdit *Edit5;
        TLabel *Label6;
        TEdit *Edit6;
        TLabel *Label7;
        TEdit *Edit7;
        TLabel *Label8;
        TEdit *Edit8;
        TLabel *Label9;
        TEdit *Edit9;
        TLabel *Label10;
        TButton *Button1;
        TChart *Chart1;
        TLineSeries *Series1;
        void __fastcall Button1Click(TObject *Sender);
        void __fastcall Edit1KeyPress(TObject *Sender, char &Key);
        void __fastcall Edit2KeyPress(TObject *Sender, char &Key);
        void __fastcall Edit3KeyPress(TObject *Sender, char &Key);
        void __fastcall Edit4KeyPress(TObject *Sender, char &Key);
        void __fastcall Edit5KeyPress(TObject *Sender, char &Key);
        void __fastcall Edit6KeyPress(TObject *Sender, char &Key);
        void __fastcall Edit7KeyPress(TObject *Sender, char &Key);
        void __fastcall Edit8KeyPress(TObject *Sender, char &Key);
        void __fastcall Edit9KeyPress(TObject *Sender, char &Key);
private:    // User declarations
public:     // User declarations
        __fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif
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
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
//---------------------------------------------------------------------------
 
#include <vcl.h>
#pragma hdrstop
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <iostream>
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
        Series1->Title="График";
        Edit1->Text=-260;
        Edit2->Text=260;
        Edit3->Text=0;
        Edit4->Text=50;
        Edit5->Text=-5;
        Edit6->Text=5;
        Edit7->Text=2;
        Edit8->Text=2;
        Edit9->Text=2;
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::Button1Click(TObject *Sender)
{
        //проверка пустых полей ввода
        for(int i=0; i<ComponentCount; i++)
        {
                if(dynamic_cast<TEdit*>(Components[i]))
                {
                        TEdit* edit = (TEdit*)Components[i];
                        if(edit->Text == "")
                        {
                                MessageBox(0,"Поле ввода не заполнено!","Ошибка",MB_OK|MB_ICONERROR);
                                edit->SetFocus();
                                return;
                        }
         }
        }
 
        double Xmin = StrToFloat(Edit1->Text);//создаем переменные Edit'ов
        double Xmax = StrToFloat(Edit2->Text);
        double Ymin = StrToFloat(Edit3->Text);
        double Ymax = StrToFloat(Edit4->Text);
        double tmin = StrToFloat(Edit5->Text);
        double tmax = StrToFloat(Edit6->Text);
        double a = StrToFloat(Edit7->Text);
        double b = StrToFloat(Edit8->Text);
        double c = StrToFloat(Edit9->Text);
        double x,y,t;
 
        Series1->Clear();//очистка серии
 
        //проверки сравнения ввода
        if ((Xmin>=Xmax)||(Ymin>=Ymax)||(tmin>=tmax))
        {
                MessageBox(0,"Максимальное значение должно быть больше!","Ошибка",MB_OK|MB_ICONERROR);
                return;
        }
 
        //присваиваем ограничения по осям X и Y
        Chart1->BottomAxis->Minimum = Xmin;
        Chart1->BottomAxis->Maximum = Xmax;
        Chart1->LeftAxis->Minimum = Ymin;
        Chart1->LeftAxis->Maximum = Ymax;
 
        //цикл построения графика на промежутке с.. по.. с шагом 0,1
        for (t=tmin; t<=tmax; t=t+0.1)
        {
                y=a*t*t;
                x=b*t*t*t+c*t;
                Series1->AddXY(x,y);
        }
        Chart1->Refresh();//обновляем график
 
        //устанавливаем шаг сетки по оси y = (макс-мин)/10
        Chart1->LeftAxis->Increment=(Chart1->LeftAxis->Maximum - Chart1->LeftAxis->Minimum)/10;
}
//Делаем проверки на ввод полей
//---------------------------------------------------------------------------
 
void __fastcall TForm1::Edit1KeyPress(TObject *Sender, char &Key)
{
        if (!(Key >= '0' && Key <= '9') && (Key!=8) && (Key!='\b') && (Key!=',')&&(Key!='-'))
        {
                Key = 0; //только разрешенные символы
        }
        if (Key==',' && Edit1->Text.Pos(",")) Key=NULL;  //только одна запятая
        if (Key=='-' && Edit1->Text.Length()>0) Key=NULL;  //только первый минус
 
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::Edit2KeyPress(TObject *Sender, char &Key)
{
        if (!(Key >= '0' && Key <= '9') && (Key!=8) && (Key!='\b') && (Key!=',')&&(Key!='-'))
        {
                Key = 0; //только разрешенные символы
        }
        if (Key==',' && Edit2->Text.Pos(",")) Key=NULL;  //только одна запятая
        if (Key=='-' && Edit2->Text.Length()>0) Key=NULL;  //только первый минус
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::Edit3KeyPress(TObject *Sender, char &Key)
{
        if (!(Key >= '0' && Key <= '9') && (Key!=8) && (Key!='\b') && (Key!=',')&&(Key!='-'))
        {
                Key = 0; //только разрешенные символы
        }
        if (Key==',' && Edit3->Text.Pos(",")) Key=NULL;  //только одна запятая
        if (Key=='-' && Edit3->Text.Length()>0) Key=NULL;  //только первый минус
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::Edit4KeyPress(TObject *Sender, char &Key)
{
        if (!(Key >= '0' && Key <= '9') && (Key!=8) && (Key!='\b') && (Key!=',')&&(Key!='-'))
        {
                Key = 0; //только разрешенные символы
        }
        if (Key==',' && Edit4->Text.Pos(",")) Key=NULL;  //только одна запятая
        if (Key=='-' && Edit4->Text.Length()>0) Key=NULL;  //только первый минус
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::Edit5KeyPress(TObject *Sender, char &Key)
{
        if (!(Key >= '0' && Key <= '9') && (Key!=8) && (Key!='\b') && (Key!=',')&&(Key!='-'))
        {
                Key = 0; //только разрешенные символы
        }
        if (Key==',' && Edit5->Text.Pos(",")) Key=NULL;  //только одна запятая
        if (Key=='-' && Edit5->Text.Length()>0) Key=NULL;  //только первый минус
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::Edit6KeyPress(TObject *Sender, char &Key)
{
        if (!(Key >= '0' && Key <= '9') && (Key!=8) && (Key!='\b') && (Key!=',')&&(Key!='-'))
        {
                Key = 0; //только разрешенные символы
        }
        if (Key==',' && Edit6->Text.Pos(",")) Key=NULL;  //только одна запятая
        if (Key=='-' && Edit6->Text.Length()>0) Key=NULL;  //только первый минус
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::Edit7KeyPress(TObject *Sender, char &Key)
{
        if (!(Key >= '0' && Key <= '9') && (Key!=8) && (Key!='\b') && (Key!=',')&&(Key!='-'))
        {
                Key = 0; //только разрешенные символы
        }
        if (Key==',' && Edit7->Text.Pos(",")) Key=NULL;  //только одна запятая
        if (Key=='-' && Edit7->Text.Length()>0) Key=NULL;  //только первый минус
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::Edit8KeyPress(TObject *Sender, char &Key)
{
        if (!(Key >= '0' && Key <= '9') && (Key!=8) && (Key!='\b') && (Key!=',')&&(Key!='-'))
        {
                Key = 0; //только разрешенные символы
        }
        if (Key==',' && Edit8->Text.Pos(",")) Key=NULL;  //только одна запятая
        if (Key=='-' && Edit8->Text.Length()>0) Key=NULL;  //только первый минус
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::Edit9KeyPress(TObject *Sender, char &Key)
{
        if (!(Key >= '0' && Key <= '9') && (Key!=8) && (Key!='\b') && (Key!=',')&&(Key!='-'))
        {
                Key = 0; //только разрешенные символы
        }
        if (Key==',' && Edit9->Text.Pos(",")) Key=NULL;  //только одна запятая
        if (Key=='-' && Edit9->Text.Length()>0) Key=NULL;  //только первый минус
}
//---------------------------------------------------------------------------
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
31.05.2013, 16:58
Помогаю со студенческими работами здесь

Построение графика
имеется функция, заданная следующим образом: 1, если ent(x) нечетная, y(x) = 0, если ent(x) четная, где ent(x) –...

Построение Графика
не могу разобраться, прошу помощи. надо построить два графика. с алгоритмом решения задачи проблема.. ...

Построение графика
С графиком разобрался, и ещё один вопросик. У меня есть процедура которая выводит на Image текст со случайным шрифтом, стилем и т.д. ...

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

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


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru