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

Создание графиков функций в Chart

11.04.2009, 17:16. Показов 27205. Ответов 23
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
ЗДраствуйте. У меня вопрос, как сделать в компоненте Chart график изображался в привычном для школы и универов виде. Т.е 2 пересекающиеся линии в центре 0 в лево идут -, в право +?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
11.04.2009, 17:16
Ответы с готовыми решениями:

Построение графиков в Chart
Добрый день. Я программирую на Builder C++. Мне по Com-порту приходят пакеты 2-х типов. Первый тип пакетов - это значения АЦП, ...

Построение графиков в Chart c помошью потоков
Добрый вечер уважаемые форумчане! В поисках информации по построению графиков с большим количеством точек наткнулся на пример кода: ...

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

23
 Аватар для mirso
562 / 373 / 55
Регистрация: 05.04.2009
Сообщений: 767
12.04.2009, 00:49
С ардонным колайдером разобраться конечно попроще!
Но если так проще, тогда я не знаю что такое посложней.
Нужно установить компонент TChart на форму и дважды по нему счелкнув
выбрать параметры,
Начиная с кнопки Add... -> Line -> Ok!
Параметров около тысячи(выходит конечно красиво!)
Оставить видимой верхнюю и левую ось(толщина, цвет и пр.).
Далее по списку...
Миниатюры
Создание графиков функций в Chart   Создание графиков функций в Chart   Создание графиков функций в Chart  

0
0 / 0 / 0
Регистрация: 05.02.2009
Сообщений: 19
12.04.2009, 03:47  [ТС]
Спасибо, но может я и ничё не понемаю, может чё та ещё. Но как нижнию линию(ось абцисса) переместить вверх?
0
 Аватар для mirso
562 / 373 / 55
Регистрация: 05.04.2009
Сообщений: 767
12.04.2009, 07:05
Я же предупреждал, опций тысячи.
верх, вниз - Position от 0% до 100%
0
0 / 0 / 0
Регистрация: 05.02.2009
Сообщений: 19
12.04.2009, 07:31  [ТС]
Всё разобрался)) Спасибо большое))
0
0 / 0 / 0
Регистрация: 05.02.2009
Сообщений: 19
16.04.2009, 22:00  [ТС]
Ещё один вопрос. Как провести вертикальные линии типо x=10. При том что y изменяется в очень больших приделах...

Добавлено через 49 секунд
Может есть какой нить метод, который строит сразу прямую на всю длину оси ОY?
0
 Аватар для mirso
562 / 373 / 55
Регистрация: 05.04.2009
Сообщений: 767
16.04.2009, 22:32
Хотелось бы на ваш код посмотреть зараренный! "myFirstChart.cpp"
0
0 / 0 / 0
Регистрация: 05.02.2009
Сообщений: 19
17.04.2009, 15:08  [ТС]
Вот мой код программы:
Series1->Clear();
if ( ALabeledEdit->Text != "" && BLabeledEdit->Text != "" &&
BLabeledEdit->Text != "" && CLabeledEdit->Text != "" &&
DLabeledEdit->Text != "" && UpLabeledEdit->Text != "" &&
DoLabeledEdit->Text != "")
{
double a = StrToInt(ALabeledEdit->Text);
double b = StrToInt(BLabeledEdit->Text);
double c = StrToInt(CLabeledEdit->Text);
double d = StrToInt(DLabeledEdit->Text);
double Up = StrToInt(UpLabeledEdit->Text);
double Do = StrToInt(DoLabeledEdit->Text);
long double S = 0, F1 = 0, F2 = 0;
const double pi = 3.14159, e = 2.71, E = 0.01;
for( int i = -100; i <= 100;i++ )
{
Series1->AddXY ( i, a * pow( e, b * sin ( c * i ) ) + d, "", clRed );
//Series1->AddXY ( i, (2 + i ), "", clRed );
/* Series1->AddXY(Up,i,"",clBlack);
Series1->AddXY(Do,i,"",clBlack);
Series1->AddXY(i,0,"",clBlack);*/
}
for (int i = Do; i < Up; i++)
{
F1 = fabs( ( a * pow( e, b * sin( c * ( i + 1 ) ) ) + d ) -
( a * pow( e, b * sin( c * i ) ) + d ) );
F2 = fabs( ( a * pow( e, b * sin( c * ( i + 1 ) ) ) + d ) +
( a * pow( e, b * sin( c * i ) ) + d ) );
S += F1 + E + ( F2 - F1)/2;
/*F1 = fabs ( ( 2 + ( i + 1 ) ) - ( 2 + i ) );
F2 = fabs ( ( 2 + ( i + 1 ) ) + ( 2 + i ) );
S = ( F1 + E + ( F2 - F1 ) / 2 ) + S;
S = ( F2 / 2 ) + E; */

}
AnEdit->Text = FloatToStr ( S );

}
Здесь написан обработчик событий на кнопку, которая ресует график. Я пытался линии вывести просто функцией x=10, но там слишком большие значения Y, компьютер завис))
0
 Аватар для mirso
562 / 373 / 55
Регистрация: 05.04.2009
Сообщений: 767
19.04.2009, 18:26
С ардонным колайдером разобраться конечно попроще!
Почему бы не использовать обычные методы рисования на канве?
но там слишком большие значения Y
Где там?

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
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
    ComboBoxSeries->DropDownCount = 40;/*!!!*/
    Series1->LinePen->Width = 3; Series1->SeriesColor = clRed;
    Series2->LinePen->Width = 2; Series2->SeriesColor = clNavy;
    Series3->LinePen->Width = 4; Series3->SeriesColor = clYellow;
}
//---------------------------------------------------------------------------
#define line (-34)
void __fastcall TForm1::ButtonCreatChartClick(TObject *Sender)
{
AnsiString StrSeries = "(";
 
double a  = TryStrToFloat(ALabeledEdit->Text,  a );//1
double b  = TryStrToFloat(BLabeledEdit->Text,  b );//3
double c  = TryStrToFloat(CLabeledEdit->Text,  c );//17,12
double d  = TryStrToFloat(DLabeledEdit->Text,  d );//14
double Up = TryStrToFloat(UpLabeledEdit->Text, Up);//-50
double Do = TryStrToFloat(DoLabeledEdit->Text, Do);//57
 
long double S  = 0,
            F1 = 0,//F2 = 0,
            tmp1, tmp2; short NN = 1;
 
const double //pi = 3.14159 = M_PI,
             e  = 2.71,  E = 0.01;; //M_E
 
    Series1->Clear();  Series2->Clear();  Series2->Clear();
 
    for( int i = -100; i <= 100; i++)
    {
        tmp1 = cos((double)i/50 * M_PI_2 ) * 100;//для sin(F) (double)
        Series1->AddXY(i, tmp1);
        //-----------------------------------------------
        StrSeries = " (" + IntToStr(NN++) + ")" +
                    " (" + IntToStr(i) + ") - [" +                         \
                           FloatToStrF ((float)i/50 ,ffGeneral, 3, 2) +   \
                   "][" + FloatToStr (tmp1) + "]";
        ComboBoxSeries->Items->Add(StrSeries);
        //-----------------------------------------------
 
        tmp1 = sin((double)i/100 * M_PI_2 ) * 100;
        ///для прямой (X)?! - задайте почтоянное значение!!!к при tm1 = - 18
 
 
        Series2->AddXY(i, tmp1);
        Series3->AddXY(i, line);
    }
 
    ComboBoxSeries->ItemIndex = 0;
 
    for (int i = Do; i < Up; i++)
    {
        tmp1 = b * sin(c * (i + 1));
        tmp2 = b * sin(c * i);
        F1 = fabs((a * pow(e, tmp1) + d) - \
                  (a * pow(e, tmp2) + d)    );
 
        S += F1 + E;
        //exception! tmp = ( F2 - F1)/2  == 0;
        //for given variant of the code
    }
AnEdit->Text = FloatToStr(S);
}
//---------------------------------------------------------------------------
Для нижней и верхней границ диапазонов аргументов, естественно нужно
создать переменные, методом перебора или с помощью производной.
Вы получите коэффициент.
И только потом - пропорциональное заполнение.

Это точно не АрдонныЙ КолайдеР?!
0
 Аватар для mirso
562 / 373 / 55
Регистрация: 05.04.2009
Сообщений: 767
19.04.2009, 18:59
На выходе.
Миниатюры
Создание графиков функций в Chart  
0
0 / 0 / 0
Регистрация: 05.02.2009
Сообщений: 19
19.04.2009, 19:15  [ТС]
У меня канву не получается, черта под графиком и её не видно....

Добавлено через 1 минуту 59 секунд
Цитата Сообщение от mirso Посмотреть сообщение

Для нижней и верхней границ диапазонов аргументов, естественно нужно
создать переменные, методом перебора или с помощью производной.
Вы получите коэффициент.
И только потом - пропорциональное заполнение.
Это я тем более не понял((

Добавлено через 3 минуты 24 секунды
Цитата Сообщение от mirso Посмотреть сообщение
Почему бы не использовать обычные методы рисования на канве?
Где там?
В графике, если ввести значения больше 10 то там миллиарды по Y получаются....
Введи a=10 b=20 c=30 d=40 ты сам увидишь...
0
 Аватар для mirso
562 / 373 / 55
Регистрация: 05.04.2009
Сообщений: 767
20.04.2009, 20:02
У меня канву не получается, черта под графиком
Канва - это пирог(внизу корж, сверху украшения).

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
int W_Can, H_Can;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
    W_Can  = ClientWidth/4;
    H_Can  = ClientHeight/4; Canvas->Pen->Width = 2;
}
//--------------------------------------------------------------------------- 
#define cr Canvas->Rectangle
void __fastcall TForm1::ButtonMinCClick(TObject *Sender)
{int tmp; Form1->Refresh();
 
    Canvas->Brush->Color = clAqua;  
    cr(W_Can   - 1, H_Can   - 1, W_Can*3, H_Can*3);//обводка
    cr(W_Can      , H_Can*2 - 1, W_Can*3, H_Can*2); Canvas->Brush->Style = bsClear;
    cr(W_Can*2 - 1, H_Can      , W_Can*2, H_Can*3);//оси
 
    Canvas->MoveTo(W_Can      , H_Can   + CSpinEdit1->Value); //начало  CSpinEdit1->Value = 17
    Canvas->LineTo(W_Can*3 - 1, H_Can*3 - CSpinEdit2->Value); //продолжение  CSE2->V = 34
 
    for(int i = 0; i < W_Can*2; i++)
    {
        tmp = H_Can*sin((double)i/W_Can*2 * M_PI_2);
        Canvas->Pixels[i + W_Can][tmp + H_Can*2 - 1] = clRed;
        if(i % 20 == 0)
        {Canvas->TextOutA(W_Can - 30, H_Can + i*H_Can/W_Can, i);
         Canvas->TextOutA(W_Can +  i, H_Can*3 +          10, i);
        }
    }
}
//--------------------------------------------------------------------------- 
void __fastcall TForm1::CSpinEdit1Change(TObject *Sender)
{
    ButtonMinC->OnClick(Form1);//для CSpinEdit2 в испекторе выбрать тоже самое
}
//---------------------------------------------------------------------------
Введи a=10 b=20 c=30 d=40 ты сам увидишь...
Зачем в "b" вводить 20?
0
0 / 0 / 0
Регистрация: 05.02.2009
Сообщений: 19
20.04.2009, 23:15  [ТС]
Там произвольные числа. Может не 20, а 19 или 23.
0
 Аватар для mirso
562 / 373 / 55
Регистрация: 05.04.2009
Сообщений: 767
20.04.2009, 23:28
Что-то мне не верится!
Так все таки, что же такое
Там
?
0
0 / 0 / 0
Регистрация: 05.02.2009
Сообщений: 19
21.04.2009, 00:39  [ТС]
Ну блин на графике, где же ещё))
0
 Аватар для mirso
562 / 373 / 55
Регистрация: 05.04.2009
Сообщений: 767
21.04.2009, 00:42
Так это произвольные числа, что ли?
0
0 / 0 / 0
Регистрация: 05.02.2009
Сообщений: 19
21.04.2009, 00:56  [ТС]
Пользователь вводит их
0
 Аватар для mirso
562 / 373 / 55
Регистрация: 05.04.2009
Сообщений: 767
21.04.2009, 01:22
Значит вы должны сделать ограничения на ввод!

1)Формула!
tmp1 = 20 * sin(30 * (100 + 1)); ==20*0.5
tmp2 = 20 * sin(30 * 100);
20*0,86602540378443864676372317075294 = 17,320508075688772935274463415059;
sin(0=0,90=1,180=0,270=-1);
cos(0=1,90=0,180=-1,270=0)
Значит max = 20*(sin((n)%90)); max == 20 ,больше не будет!
На это этапе ключевой аргумент - "b"!!!
Далее...
F1 = 10*pow(2.7, 20) + 40;
S += F1 + E;
2.7^20=423911582,75216203514294433201;
Вы представляете себе эти числа?!

Их даже не следует *10! Стыдно к ним прибавлять 40;
Они конечно не дотягивает до double long 1,1*10^4932.

К чему я упомянул о коллайдере?(неоднократно)

Весь научный мир понимает значимость этих вычислений!
Оттого и требования к устойчивости системы завышеные.
Вещь не из дешевых.

В коллайдере точность сопряжения лазерных пучков ниже.
а за единицу устойчивости принята единица даже не 0,001 микрона!
Точности сопряжения основных элементов порядка десятых и сотых долей миллиметра((
куда им.
Микрон - это 1/1000 миллиметра.
Следвательно, миллиметр/1000 - это 1 микрон.

Вы должны поставить перед собой вопрос.
Вопрос! Для чего пользователю такие измерения?
Степень погрешности которых так высока?
И если вы решите, что условие необходимое -
- оставляйте все как есть!!!
Если нет?!

Ни предостережениями,
а невозможностью доступа.
Перекройте кислород!
В общем!
Пальцами - яйцами в солонку не макать!!!
0
0 / 0 / 0
Регистрация: 05.02.2009
Сообщений: 19
21.04.2009, 20:46  [ТС]
А что такое cr? в твоём скрипте

Добавлено через 1 минуту 31 секунду
CSpinEdit1 и это что такое?
0
 Аватар для mirso
562 / 373 / 55
Регистрация: 05.04.2009
Сообщений: 767
21.04.2009, 21:10
#define cr Canvas->Rectangle
cr - замена Canvas->Rectangle

Можно везде где cr заменить на Canvas->Rectangle - тексту будет больше!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
21.04.2009, 21:10
Помогаю со студенческими работами здесь

График функций при помоши компоненты chart в С++ builder
Смотрите есть у меня программа для решений нелинейных уравнений методом Хорд. Нужно чтоб программа рисовала график функций.Сhart рисует...

Несколько графиков функций в одном Tchart
Здравствуйте! необходимо написать программу, которая на одном графике рисует несколько функций. Вроде написал код для добавления нескольких...

Инкапсулировать построение графиков функций в классы
Мне нужно нарисовать график функции с помощью локальных классов. void buildgraph(AnsiString f, float xn, float xk) {class Build gr ...

Построение графиков функций от трех переменных
грубо говоря какой компонет реализует три оси OZ OX OY

Создать программу рисования в форме графиков функций
Создать программу вывода текста и рисования в форме графиков функций. Программа предусматривает три варианта рисования графика: -...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизита табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать контроль заполнения реквизита "ПричинаСписания". . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Программное заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru