Форум программистов, компьютерный форум, киберфорум
Lazarus
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.84/259: Рейтинг темы: голосов - 259, средняя оценка - 4.84
4 / 4 / 0
Регистрация: 14.05.2012
Сообщений: 116

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

01.04.2013, 07:35. Показов 54164. Ответов 30
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день!!! Помогите мне, пожалуйста, мне очень срочно надо создать проект построения графика функции y=cos(x)/(1-x), где x принадлежит от -пи до пи с помощью компонента TChart, заранее огромное спасибо...
1
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
01.04.2013, 07:35
Ответы с готовыми решениями:

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

Построение графика кубической функции в Lazarus
Помогите, пожалуйста, написать программу для построения графика функции y=x^3

Компонент TChart: поточечное построение графика функции
В Delphi есть компонент TChar и в нем есть PointSeries, в Lazaruse я такого не могу найти, как построить точечный график функции???...

30
445 / 373 / 133
Регистрация: 09.09.2011
Сообщений: 1,343
01.04.2013, 09:06
Вот тут всё подробно написано http://wiki.freepascal.org/TAC... ng_started
1
4 / 4 / 0
Регистрация: 14.05.2012
Сообщений: 116
01.04.2013, 22:48  [ТС]
Я не совсем разобралась... у меня очень много ошибок... помогите, пожалуйста, мне очень необходима эта программа... Заранее большое спасибо....
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33187 / 21484 / 8232
Регистрация: 22.10.2011
Сообщений: 36,858
Записей в блоге: 12
02.04.2013, 00:44
Лучший ответ Сообщение было отмечено volvo как решение

Решение

Алёнчик, Ничего сложного: создаешь новый проект в Лазарусе, кладешь на форму TChart с закладки Chart, выбираешь его на форме, в Инспекторе объектов ищешь свойство Series, и жмешь на кнопку с многоточием рядом с этим свойством. Откроется окно добавления серий. Там надо нажать на кнопку "+" (она же Add), выбрать из выпадающего списка TFuncSeries, и закрыть этот диалог.

А теперь в Инспекторе Объектов выбираешь эту серию и для нее вот таким образом заполняешь свойство Extent:


Это почти всё, что нужно. Осталось только перейти на вкладку Events, дабл-кликнуть на единственное событие, OnCalculate, и записать вот это:
Pascal
1
2
3
4
procedure TForm1.Chart1FuncSeries1Calculate(const AX: Double; out AY: Double);
begin
  AY := cos(AX) / (1 - AX)
end;
Всё, программу можно компилировать и запускать. Вот результат ее работы:


Для сравнения: wolframalpha выдает вот такой график:


Как говорится, найди отличия. Изменишь в Extent еще и минимальный/максимальный Y - вообще отличий не найдешь
3
4 / 4 / 0
Регистрация: 14.05.2012
Сообщений: 116
02.04.2013, 08:17  [ТС]
Большое спасибо, я всё поняла и сделала
0
0 / 0 / 0
Регистрация: 19.04.2013
Сообщений: 5
19.04.2013, 01:51
а как в данном случае подправить начало, к примеру, синусоиды?
график съезжает и начало где-то в координатах (0;0,8)
Кликните здесь для просмотра всего текста
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33187 / 21484 / 8232
Регистрация: 22.10.2011
Сообщений: 36,858
Записей в блоге: 12
19.04.2013, 02:42
Как именно рисовалась синусоида? Если так, как описано в четвертом посте
Pascal
1
2
3
4
procedure TfmMainDF.Chart1FuncSeries1Calculate(const AX: Double; out AY: Double);
begin
  AY := sin(AX);
end;
- то ничего не съезжает:
1
0 / 0 / 0
Регистрация: 19.04.2013
Сообщений: 5
23.04.2013, 20:03
в процессе изучения созрел еще один вопрос по TChart:
Кликните здесь для просмотра всего текста
Delphi
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
unit Unit5;
 
{$mode objfpc}{$H+}
 
interface
 
uses
  Classes, SysUtils, FileUtil, TASources, TAGraph, TAFuncSeries, TASeries,
  Forms, Controls, Graphics, Dialogs, StdCtrls, ExtCtrls;
 
type
 
  { TForm5 }
 
  TForm5 = class(TForm)
    Chart1: TChart;
    Chart1LineSeries1: TLineSeries;
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Button4: TButton;
    Button7: TButton;
    Button8: TButton;
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    LabeledEdit1: TLabeledEdit;
    LabeledEdit2: TLabeledEdit;
    LabeledEdit3: TLabeledEdit;
    LabeledEdit4: TLabeledEdit;
    LabeledEdit5: TLabeledEdit;
    LabeledEdit6: TLabeledEdit;
    LabeledEdit7: TLabeledEdit;
    LabeledEdit8: TLabeledEdit;
    OpenDialog1: TOpenDialog;
    SaveDialog1: TSaveDialog;
    StaticText2: TStaticText;
    StaticText3: TStaticText;
    StaticText7: TStaticText;
    procedure Button1Click(Sender: TObject);
    procedure Button7Click(Sender: TObject);
    procedure Chart1FuncSeries1Calculate(const AX: Double; out AY: Double);
    procedure Edit1Change(Sender: TObject);
    procedure Edit2Change(Sender: TObject);
    procedure Edit3Change(Sender: TObject);
    procedure LabeledEdit4Change(Sender: TObject);
  private
    { private declarations }
  public
    { public declarations }
  end;
 
var
  Form5: TForm5;
  F, y, x,dx: real; i, n: integer; a, t, k: integer; o,h: integer;
 
implementation
 
{$R *.lfm}
 
{ TForm5 }
 
procedure TForm5.Chart1FuncSeries1Calculate(const AX: Double; out AY: Double);
begin
end;
 
procedure TForm5.Button7Click(Sender: TObject);
begin
  o:=StrToInt(LabeledEdit1.Text);
  h:=StrToInt(LabeledEdit2.Text);
end;
 
procedure TForm5.Button1Click(Sender: TObject);
  var
  i, n: integer;
begin
  Chart1LineSeries1.Clear;
  if (Edit1.Text='') or (Edit2.Text='') or (Edit3.Text='') then Showmessage('Введите данные!');
  if (Edit1.Text='') or (Edit2.Text='') or (Edit3.Text='') then
  begin
  Edit1.Text:='1';
  Edit2.Text:='1';
  Edit3.Text:='0';
  end;
  a:=StrToInt(Edit2.Text);
  t:=StrToInt(Edit3.Text);
  k:=StrToInt(Edit1.Text);
 
  Chart1LineSeries1:= TLineSeries.Create(Chart1);
  Chart1LineSeries1.ShowPoints:= False;
  Chart1.AddSeries(Chart1LineSeries1);
  Chart1.Title.Visible:= true;
  x:=0;
  for i:=-100 to 100 do
  begin
  Chart1LineSeries1.AddXY(x,a*sin(k*x+t),'',clRed);
  x:=x+0.29;
  end;
 end;


я так полагаю, плавность графика все-таки тут должна быть?)
или все же нет?

а если да, то как это сделать?

пока плохо разбираюсь в этом)
Миниатюры
Построение графика функции  
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33187 / 21484 / 8232
Регистрация: 22.10.2011
Сообщений: 36,858
Записей в блоге: 12
23.04.2013, 21:23
Цитата Сообщение от dreamcomes Посмотреть сообщение
я так полагаю, плавность графика все-таки тут должна быть?)
В данном случае - нет, потому что используется TLineSeries, какая уж тут плавность, если точки, которые добавляются к серии, соединяются прямыми линиями?

Нужна плавность - либо TFuncSeries, либо убирай отображение линий (LineType=ltNone) и ставь точки гораздо чаще...
1
0 / 0 / 0
Регистрация: 19.04.2013
Сообщений: 5
24.04.2013, 09:36
Спасибо)
подправил немного, теперь в плавности почти нет необходимости)
строит все отлично!

теперь появился еще вопрос:
как по этому графику вычислять промежутки монотонности и интервалы положительных/отрицательных значений функции?
т.е. выделить другим цветом область, например, промежуток убывания?
p.s. интервалы для вычисления промежутков задаются с Edit'ов

знаний маловато еще..)
все-таки первый курс программной инженерии
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33187 / 21484 / 8232
Регистрация: 22.10.2011
Сообщений: 36,858
Записей в блоге: 12
24.04.2013, 11:12
Например, вот так:

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
var
  x, prev, curr : double;
  mycolor : TColor;
begin
  x:=0;
  prev := a*sin(k*x+t);
  for i:= start to finish do
  begin
    curr := a*sin(k*x+t);
    if prev > curr then mycolor := clRed else mycolor := clBlue; // возрастающие - синие, убывающие - красные
    Chart1LineSeries1.AddXY(x, curr, '', mycolor);
    x:=x + deltax;
    prev := curr;
  end;
end;
2
0 / 0 / 0
Регистрация: 19.04.2013
Сообщений: 5
25.04.2013, 17:37
C первым своим пунктом (гармоническая функция) разобрался более менее)
теперь появляются вопросы по графикам логарифмической и экспоненциальной функций

не могу найти подробную инфу по заполнению AddXY() (что куда записывается и зачем)

имеется функция
Delphi
1
2
3
4
function fx(a,b:real):real;
begin
xn:=ln(a)/ln(b);
end;
и процедура
Delphi
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
procedure TForm7.Button1Click(Sender: TObject);
var
 i: integer;
 
begin
 if (Edit2.Text='') or (Edit3.Text='') then Showmessage('Введите данные!');
 if (Edit2.Text='') or (Edit3.Text='') then
 begin
 Edit2.Text:='2';
 Edit3.Text:='2';
 end;
 a:=StrToFloat(Edit2.Text);
 b:=StrToFloat(Edit3.Text);
 
 Chart1LineSeries1:= TLineSeries.Create(Chart1);
 Chart1LineSeries1.ShowPoints:= False;
 Chart1.AddSeries(Chart1LineSeries1);
 Chart1.Title.Visible:= true;
 x:=0;
 for i:=0 to 100 do
 begin
 Chart1LineSeries1.AddXY(x,xn,'',clRed);
 x:=x+0.29;
 end;
end;
прощу помощи разобраться)
Миниатюры
Построение графика функции  
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33187 / 21484 / 8232
Регистрация: 22.10.2011
Сообщений: 36,858
Записей в блоге: 12
25.04.2013, 18:43
Цитата Сообщение от dreamcomes Посмотреть сообщение
что куда записывается и зачем
Первый параметр - абсцисса точки, добавляемой к чарту. Второй - ордината, третий - текст, который будет отображаться на осях, если Axis->Marks->Style выставлено в smsLabel, и четвертый - цвет точки. То есть, нужно что-то вроде:
Pascal
1
2
// uses Math;
Chart1LineSeries1.AddXY(x, logn(a, x), '', clRed); // вместо самописной функции fx - используй logn
, только надо следить за интервалом: при попытке взять логарифм нуля будет вылет, не существует его...
1
13 / 13 / 4
Регистрация: 01.12.2010
Сообщений: 95
26.04.2018, 22:48
Время прошло, кое-что поменялось. Я работаю на Lazarus 1.6.2.
На TAChart Tutorial теперь рекомендуют делать так:
1. Компонент по-прежнему называется TChart, и он по-прежнему находится на странице Chart.
2. В предложение uses добавить tachartlazaruspkg.
3. Выбираем по-прежнему свойство Series, но теперь вместо TFuncSeries выбирать TLineSeries (в варианте с русским интерфейсом "График").
4. Свойство Extent заполнять, как и раньше.
5. А теперь наибольшее изменение. Для TLineSeries они (т.е. Tutorial) теперь нет события OnCalculate. Вместо этого туториал рекомендует записывать в FormCreate. В моем случае (требовалось построить sin(x) для x в диапазоне от -3.14 до 3.14):
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
procedure TForm1.FormCreate(Sender: TObject);
const
  N = 100;
  MIN = -10;
  MAX = 10;
var
  i: Integer;
  x: Double;
begin
  for i:=0 to N-1 do begin
    x := MIN + (MAX - MIN) * i /(N - 1);
    Chart1LineSeries1.AddXY(x, sin(x));
  end;
end;
Результат на рисунке.
Миниатюры
Построение графика функции  
0
13 / 13 / 4
Регистрация: 01.12.2010
Сообщений: 95
26.04.2018, 23:06
Я поторопился с отправкой. Естественно, не обязательно использовать событие OnCreate для формы. Можно и иначе, например по щелчку на какой-либо кнопке. Для меня было новым то, что теперь надо использовать внешнее (если можно так выразиться) событие - например, Button1Click, - а для самого графика события OnCalculate я уже не нашел.
0
602 / 550 / 210
Регистрация: 24.01.2012
Сообщений: 1,352
26.04.2018, 23:11
Вообще-то там просто руководство новичкам, как начать работать с tchart на примере lineseries. А использовать funcseries, насколько я понял, никто не запрещает.
0
13 / 13 / 4
Регистрация: 01.12.2010
Сообщений: 95
26.04.2018, 23:31
Я не нашел FuncSeries! Теперь LineSeries.
0
602 / 550 / 210
Регистрация: 24.01.2012
Сообщений: 1,352
26.04.2018, 23:45
Лучший ответ Сообщение было отмечено ZX Spectrum-128 как решение

Решение

вот здесь
Миниатюры
Построение графика функции  
0
13 / 13 / 4
Регистрация: 01.12.2010
Сообщений: 95
27.04.2018, 01:11
спасибо, принял к сведению
0
59 / 0 / 0
Регистрация: 10.02.2019
Сообщений: 54
16.02.2019, 16:28
volvo, а можете мне подсказать почему график не меняет цвет? В свойствах чарта все цвета поменял на жёлтый, а толшины на 3, а всё равно рисуется чёрным с толщиной 1. Ничего понять не могу уже час сижу..
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
procedure TForm1.EditButton1Change(Sender: TObject);
var
i, n: integer;
prev, curr : double;
mycolor : TColor;
begin
Chart1LineSeries1.Clear;
a:=StrToInt(CalcEdit1.Text);
t:=StrToInt(CalcEdit2.Text);
k:=StrToInt(EditButton1.Text);
 
Chart1LineSeries1:= TLineSeries.Create(Chart1);
Chart1.AddSeries(Chart1LineSeries1);
x:=-100;
prev := a*sin(k*x);
for i:=0 to 400 do
begin
curr := a*sin(k*x+t);
if prev > curr then mycolor := clRed else mycolor := clBlue; // возрастающие - синие, убывающие - красные
Chart1LineSeries1.AddXY(x, curr, '`', mycolor);
prev := curr;
x:=x+t;
end;
end;
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
16.02.2019, 16:28
Помогаю со студенческими работами здесь

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

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

Вычисление функции на заданном промежутке, и построение графика этой функции
Написать блок-схему и программу вычисления функции на за- данном промежутке с шагом 0.2 и построить график этой функции. Если x>1 ...

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

Построение графика функции имея таблицу значений функции
Мой ход решения, иначе не умею, решение через транспонируемые матрицы с построением графика Не могу выразить С (коэфициенты а1 а2 а3...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
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
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru