Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.11.2008, 12:12   #1
WPALI4
Пользователь
 
Регистрация: 18.10.2008
Сообщений: 17
По умолчанию Постройка графика (Help!)

Здравствуйте! Простите нас дураков! Мы с другом уже много времени мучаемся над решением обезумевшей лабы. Дело в том, что мы не учимся на программистов, но нам, мало что объясняя задали зверскую вещь на Delphi
Вот задание:
Цитата:
Составить программу построения графиков, приведённых ниже функ-ций. График функции рекомендуется выводить на компонент TImage. Для вывода отдельных точек можно воспользоваться функцией Image.Canvas.Pixels[X, Y].
Пример во вложении.
Помогите пожалуйста!

Вот что мы сделали, но график рисуется какой-то не такой Помогите пожалуйста...
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls, math;

type
  TForm1 = class(TForm)
    Image1: TImage;
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Edit4: TEdit;
    Edit5: TEdit;
    Button1: TButton;
    Image2: TImage;
    Edit6: TEdit;
    Edit7: TEdit;
    Edit8: TEdit;
    Edit9: TEdit;
    Edit10: TEdit;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
x, x1, x2, x3, x4, x5, y, y1, y2, y3, y4, y5: real;
xx1, xx2, xx3, xx4, xx5, yy1, yy2, yy3, yy4, yy5: string;
xxx1, xxx2, xxx3, xxx4, xxx5, yyy1, yyy2, yyy3, yyy4, yyy5: integer;
i: integer;
begin
  Image1.Canvas.FillRect(ClientRect);


  for i:=1 to 501 do
 begin
   Image1.Canvas.Pixels[251, i]:=clblack;
   Image1.Canvas.Pixels[i, 251]:=clblack;
 end;

 x:=StrToFloat(Edit1.Text);
 x1:=x + 251;
 y:=2*(power(x, 2)) + (3/4)*x - 1;
 y1:=251 - y;
 Edit6.Text:=Floattostr(y);


 x:=StrToFloat(Edit2.Text);
 x2:=x + 251;
 y:=2*(power(x, 2)) + (3/4)*x - 1;
 y2:= 251 - y;
 Edit7.Text:=Floattostr(y);


 x:=StrToFloat(Edit3.Text);
 x3:=x + 251;
 y:=2*(power(x, 2)) + (3/4)*x - 1;
 y3:= 251 - y;
 Edit8.Text:=Floattostr(y);



 x:=StrToFloat(Edit4.Text);
 x4:=x + 251;
 y:=2*(power(x, 2)) + (3/4)*x - 1;
 y4:= 251 - y;
 Edit9.Text:=Floattostr(y);



 x:=StrToFloat(Edit5.Text);
 x5:=x + 251;
 y:=2*(power(x, 2)) + (3/4)*x - 1;
 y5:= 251- y;
 Edit10.Text:=Floattostr(y);
 //////////////////////////////////////////////////////////////////

 x1:=Round(x1);
 x2:=Round(x2);
 x3:=Round(x3);
 x4:=Round(x4);
 x5:=Round(x5);



 y1:=Round(y1);
 y2:=Round(y2);
 y3:=Round(y3);
 y4:=Round(y4);
 y5:=Round(y5);


 xx1:=FloatToStr(x1);
 xx2:=FloatToStr(x2);
 xx3:=FloatToStr(x3);
 xx4:=FloatToStr(x4);
 xx5:=FloatToStr(x5);

 yy1:=FloatToStr(y1);
 yy2:=FloatToStr(y2);
 yy3:=FloatToStr(y3);
 yy4:=FloatToStr(y4);
 yy5:=FloatToStr(y5);

 xxx1:=StrToInt(xx1);
 xxx2:=StrToInt(xx2);
 xxx3:=StrToInt(xx3);
 xxx4:=StrToInt(xx4);
 xxx5:=StrToInt(xx5);

 yyy1:=StrToInt(yy1);
 yyy2:=StrToInt(yy2);
 yyy3:=StrToInt(yy3);
 yyy4:=StrToInt(yy4);
 yyy5:=StrToInt(yy5);


 Image1.Canvas.MoveTo(xxx1, yyy1);
 Image1.Canvas.LineTo(xxx2, yyy2);

 Image1.Canvas.MoveTo(xxx2, yyy2);
 Image1.Canvas.LineTo(xxx3, yyy3);

 Image1.Canvas.MoveTo(xxx3, yyy3);
 Image1.Canvas.LineTo(xxx4, yyy4);

 Image1.Canvas.MoveTo(xxx4, yyy4);
 Image1.Canvas.LineTo(xxx5, yyy5);
end;

end.
Изображения
Тип файла: bmp pic.bmp (14.7 Кб, 176 просмотров)
Вложения
Тип файла: rar project.rar (6.7 Кб, 20 просмотров)

Последний раз редактировалось WPALI4; 03.11.2008 в 11:04.
WPALI4 вне форума Ответить с цитированием
Старый 03.11.2008, 22:48   #2
WPALI4
Пользователь
 
Регистрация: 18.10.2008
Сообщений: 17
По умолчанию

help...
WPALI4 вне форума Ответить с цитированием
Старый 03.11.2008, 23:37   #3
eoln
Старожил
 
Аватар для eoln
 
Регистрация: 26.04.2008
Сообщений: 2,645
По умолчанию

А где написано, что по точкам строим? Удаляем все Edit'ы и пишем
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls;

type
  TForm1 = class(TForm)
    Image1: TImage;
    Button1: TButton;
    Image2: TImage;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
  x, y: integer;
begin
  with Image1.Canvas do
  begin
    FillRect(ClientRect);
    MoveTo(251, 0);
    LineTo(251, 501);
    MoveTo(0, 251);
    LineTo(501, 251);
    MoveTo(251 + x, 251 - round(2*sqr(-15)+3/4*x-1));
    for x := -14 to 15 do
    LineTo(251 + x, 251 - round(2*sqr(x)+3/4*x-1));
  end
end;

end.
eoln вне форума Ответить с цитированием
Старый 04.11.2008, 11:37   #4
WPALI4
Пользователь
 
Регистрация: 18.10.2008
Сообщений: 17
По умолчанию

Уважаемый eoln, это ведь квадратное уравнение и должна всегда рисоваться порабола. При for x := -14 to 15 do рисуется порабола, но стоит ввести другие значения, как рисуется какой то треугольник
В готовой проге должно быть два эдита куда вводить числа, начальное значение и конечное, которое должно вводиться в наше квадратное уравнение(значение X), по значениям X должен считаться Y и по этим данным строиться график.
WPALI4 вне форума Ответить с цитированием
Старый 04.11.2008, 11:48   #5
eoln
Старожил
 
Аватар для eoln
 
Регистрация: 26.04.2008
Сообщений: 2,645
По умолчанию

Цитата:
MoveTo(251 + x, 251 - round(2*sqr(-15)+3/4*x-1));
for x := -14 to 15 do
1) Вот код разберите и увидите, что всё правильно.
2) То, что выделено цветом можете брать из едитов. (-14=-15+1 где 1-это шаг)
3) И масштаб неплохо бы ввести, чтобы более "красиво" было
eoln вне форума Ответить с цитированием
Старый 04.11.2008, 13:27   #6
WPALI4
Пользователь
 
Регистрация: 18.10.2008
Сообщений: 17
По умолчанию

Цитата:
Сообщение от eoln Посмотреть сообщение
1) Вот код разберите и увидите, что всё правильно.
2) То, что выделено цветом можете брать из едитов. (-14=-15+1 где 1-это шаг)
3) И масштаб неплохо бы ввести, чтобы более "красиво" было
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
  x, y: integer;
begin
 with Image1.Canvas do
  begin
    FillRect(ClientRect);
    MoveTo(251, 0);
    LineTo(251, 501);
    MoveTo(0, 251);
    LineTo(501, 251);
    MoveTo(251 + x, 251 - round(2*sqr(StrToInt(Edit1.Text))+3/4*x-1));
    for x := StrToInt(Edit2.Text) to 15 do
    LineTo(251 + x, 251 - round(2*sqr(x)+3/4*x-1));
  end
end;
Вот что мы делаем, что здесь неверно?
Должена всегда получаться порабола, только разной формы. Вот вы нам подсказали как из Edit'ов брать числа, мы вводим, но получается не пойми что.
В прикреплении сам '.exe'.
Вложения
Тип файла: rar Project1.rar (152.5 Кб, 27 просмотров)

Последний раз редактировалось WPALI4; 04.11.2008 в 16:47.
WPALI4 вне форума Ответить с цитированием
Старый 05.11.2008, 14:33   #7
WPALI4
Пользователь
 
Регистрация: 18.10.2008
Сообщений: 17
По умолчанию

Ну так почему же не получается порабола?
Вы говорите код правильный...но стоит ввести другие какие нибудь числа в эдиты, так сразу вместо пораболы какие то углы... :-(
А должна получаться всегда порабола, только разной формы, при подстановке разных чисел.
:-(
WPALI4 вне форума Ответить с цитированием
Старый 05.11.2008, 15:34   #8
Карась
Участник клуба
 
Аватар для Карась
 
Регистрация: 26.10.2007
Сообщений: 1,244
По умолчанию

А потести этот код... Парабола?
Вложения
Тип файла: rar Project1.rar (163.3 Кб, 29 просмотров)
Умом Россию не понять, пока не выпито ноль пять,
А если выпито ноль пять всё делом кажется не хитрым,
Попытка глубже понимать уже попахивает литром...
Карась вне форума Ответить с цитированием
Старый 05.11.2008, 15:55   #9
WPALI4
Пользователь
 
Регистрация: 18.10.2008
Сообщений: 17
По умолчанию

Цитата:
Сообщение от Карась Посмотреть сообщение
А потести этот код... Парабола?
Кажется это то, что нужно!
Покажи пожалуйста, как такое сделать?
WPALI4 вне форума Ответить с цитированием
Старый 05.11.2008, 16:32   #10
eoln
Старожил
 
Аватар для eoln
 
Регистрация: 26.04.2008
Сообщений: 2,645
По умолчанию

Цитата:
Сообщение от WPALI4 Посмотреть сообщение
Ну так почему же не получается порабола?
Вы говорите код правильный...но стоит ввести другие какие нибудь числа в эдиты, так сразу вместо пораболы какие то углы... :-(
А должна получаться всегда порабола, только разной формы, при подстановке разных чисел.
:-(
Едиты не там стоят, разный цвет соответствовал разным эдитам. Вот пример с выбором шага и масштабом.
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
  x: real;
  mashtab: integer;
begin
  with Image1.Canvas do
  begin
    FillRect(ClientRect);
    MoveTo(251, 0);
    LineTo(251, 501);
    MoveTo(0, 251);
    LineTo(501, 251);
    //примерное увеличение
    mashtab := round( 251/(2*sqr(strtoint(edit1.text))+3/4*x-1) ) + 1;
    x := strtoint(edit1.text);
    MoveTo(251 + round(mashtab*x), 251 - round(mashtab*(2*sqr(x)+3/4*x-1)));
    while x <= strtoint(edit2.text) do
    begin
      LineTo(251 + round(mashtab*x), 251 - round(mashtab*(2*sqr(x)+3/4*x-1)));
      x := x + strtofloat(edit3.text);
    end;
  end
end;
edit1 edit2 - начало и конец интервала на котором строим график
edit3 - шаг

Последний раз редактировалось eoln; 05.11.2008 в 16:40.
eoln вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Графика V1rusPro Общие вопросы .NET 0 22.04.2008 08:25
Графика Exact Паскаль, Turbo Pascal, PascalABC.NET 3 14.03.2008 18:37
графика ben95 Общие вопросы Delphi 3 06.02.2008 22:24
Графика Aram Общие вопросы C/C++ 1 18.04.2007 18:56