43 / 1 / 0
Регистрация: 14.01.2016
Сообщений: 93
1

Построить графики заданных функций на Canvas

02.05.2018, 19:56. Показов 1075. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый вечер, нужна помощь. В канвасе плохо разбираюсь, нужно построить графики y=|cos(x)*x| и y=|sin(x)|. Написал код, но мне кажется, что графики строятся неправильно.
Pascal
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
unit Lab3;
 
interface
 
uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.Imaging.jpeg,
  Vcl.ExtCtrls;
 
type
  TForm1 = class(TForm)
    Image1: TImage;
    Image2: TImage;
    Edit1: TEdit;
    Button1: TButton;
    Edit2: TEdit;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.dfm}
 
procedure TForm1.Button1Click(Sender: TObject);
var
  x1,x2,y:real;
  x0,y0:integer;
begin
  //очистка экрана
  Image2.Canvas.Pen.Color:=clBlack;
  Image2.Canvas.Rectangle(0,0,ClientWidth,ClientHeight);
  x1:=StrToInt(Edit1.Text);//считываем x1 для cos
  x2:=StrToInt(Edit2.Text);//считываем x2 для sin
  //находи центр
  x0:=Image2.Width div 2;
  y0:=Image2.Height div 2;
  //рисуем оси
  with Image2.Canvas do
  begin
  Pen.Width:=2;
  MoveTo(x0,0);
  LineTo(x0,ClientHeight);
  MoveTo(0,y0);
  LineTo(ClientWidth,y0);
  end;
 
  //рисуем график
  Image2.Canvas.Pen.Color:=clRed;
  Image2.Canvas.Pen.Width:=1;
  y:=abs(cos(x1)*x1);
  Image2.Canvas.MoveTo(Trunc(x1),Trunc(y));
  repeat
    x1:=x1+0.1;
    y:=-abs(cos(x1)*x1);
    Image2.Canvas.LineTo(Trunc(x1*100)+x0,Trunc(y*100)+y0);
  until x1>=100;
 
  Image2.Canvas.Pen.Color:=clGreen;
  Image2.Canvas.Pen.Width:=1;
  y:=abs(sin(x2));
  Image2.Canvas.MoveTo(Trunc(x2),Trunc(y));
  repeat
    x2:=x2+0.1;
    y:=-abs(sin(x2));
    Image2.Canvas.LineTo(Trunc(x2*100)+x0,Trunc(y*100)+y0);
  until x2>=100;
end;
 
end.
Миниатюры
Построить графики заданных функций на Canvas   Построить графики заданных функций на Canvas  
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
02.05.2018, 19:56
Ответы с готовыми решениями:

Построить графики функций
Уважаемые программисты, помогите в решении задачи. Вычислить значения двух функций в n=14...

Исследовать и построить графики функций
Исследовать и построить графики функций, использование масштаба обязательна. 5. y = (x-1) (2 - |...

построить функцию y=kx+b (линейная функция) с помощью Vcart или canvas (form.canvas)
Надо построить функцию y=kx+b (линейная функция) с помощью Vcart или canvas (form.canvas)

Масштабирование графики на Canvas с использованием TrackBar
На форме с помощью Canvas нарисована прямая. Подскажите, как используя компонент TrackBar менять...

4
Почетный модератор
64304 / 47599 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
02.05.2018, 20:50 2
Как-то пишете неудачно, я бы написал так.
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
function f1(x:real):real;
begin
f1:=abs(sin(x));
end;
function f2(x:real):real;
begin
f2:=abs(cos(x)*x);
end;
procedure TForm1.Button1Click(Sender: TObject);
var xn,xk,x,dx,mx,my:real;
    x0,y0,i:integer;
    s:string;
begin
//диапазон
xn:=-2*pi;
xk:=2*pi;
//начало координат
x0:=Image1.Width div 2;
y0:=Image1.Height-50;
//масштабы по осям
mx:=(x0-20)/2/pi;
my:=(y0-20)/2/pi;
with Image1.Canvas do
 begin
  //оси
  moveto(0,y0);lineto(2*x0,y0);
  textout(2*x0-20,y0-20,'X');
  moveto(x0,0);lineto(x0,2*y0);
  textout(x0+5,0,'Y');
  textout(x0+5,y0+10,'0');
  //подписи по оси Х
  for i:=1 to 4 do
   begin
    moveto(x0+round(i*pi*mx/2),y0-3);
    lineto(x0+round(i*pi*mx/2),y0+3);
    moveto(x0-round(i*pi*mx/2),y0-3);
    lineto(x0-round(i*pi*mx/2),y0+3);
    case i of
    1:s:='0.5pi';
    2:s:='pi';
    3:s:='1.5pi';
    4:s:='2pi';
    end;
    textout(x0+round(i*pi*mx/2),y0+10,s);
    textout(x0-round(i*pi*mx/2),y0+10,'-'+s);
   end;
   //подписи по оси Y
  for i:=1 to 7 do
   begin
    moveto(x0-5,y0-round(i*my));
    lineto(x0+5,y0-round(i*my));
    textout(x0-25,y0-round(i*my)-5,floattostr(i));
   end;
   //1 график
  pen.Color:=clBlue;
  x:=xn;
  dx:=0.01;
  while x<=xk do
   begin
    if x=xn then moveto(x0+round(x*mx),y0-round(f1(x)*my))
    else lineto(x0+round(x*mx),y0-round(f1(x)*my));
    x:=x+dx;
   end;
  //2 график
  pen.Color:=clRed;
  x:=xn;
  while x<=xk do
   begin
    if x=xn then moveto(x0+round(x*mx),y0-round(f2(x)*my))
    else lineto(x0+round(x*mx),y0-round(f2(x)*my));
    x:=x+dx;
   end;
 end;
end;
0
43 / 1 / 0
Регистрация: 14.01.2016
Сообщений: 93
02.05.2018, 20:56  [ТС] 3
Спасибо, все работает)

Добавлено через 59 секунд
А для чего переменная s:string?
0
Модератор
9382 / 6153 / 2401
Регистрация: 21.01.2014
Сообщений: 26,249
Записей в блоге: 3
02.05.2018, 21:04 4
Цитата Сообщение от Планктон Тоня Посмотреть сообщение
А для чего переменная s:string?
А по коду разве не видно, где она используется?
0
43 / 1 / 0
Регистрация: 14.01.2016
Сообщений: 93
02.05.2018, 21:05  [ТС] 5
А все понял, чет не заметил)
0
02.05.2018, 21:05
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.05.2018, 21:05
Помогаю со студенческими работами здесь

Построить графики неявно заданных функций
1) x2-3xy+2y2 =0 пробовала написать так: ezplot ('x.^2-3*x.*y+2*y.^2') но неправильно =( 2)...

Построить графики функций y=y(x), заданных параметрически
Всем привет! Помогите пожалуйста построить график. Буду очень благодарен, если опишете алгоритм...

Построить графики и численно найти нули заданных функций
Решите пожалуйста задачу...Построить графики и численно найти нули следующих функций (координатные...

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


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru