Модераторы: Snowy, Alexeis, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> 3 Графика функции 
:(
    Опции темы
Sannyore
Дата 2.4.2011, 14:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 9.3.2010

Репутация: нет
Всего: нет



Код

unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Image1: TImage;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  x0, y0 : integer; // начало координат
  f1, f2, f3 : real; // значения функций
  kx: integer; // кол-во пикселей в единичном отрезке
  x1, x2 : real; // диапозон изменения аргументов
  y1, y2, y3 : real; // диапозон изменения значений
  dx : real; // приращение     // шаг аргумента
  xp, yp1, yp2, yp3, a, b : real;//преобразованные точки для вывода на график
  s : integer; // размерность системы координат


implementation

{$R *.dfm}
procedure TForm1.Button2Click(Sender: TObject);
begin
close;
end;

procedure TForm1.Button1Click(Sender: TObject);
const
pi = 3.14;
begin
s:=350;
dx := 0.00003;
x1:= 0;
x2:=pi;
a:= 0;
b :=pi;
x0 := 150; //ось x
y0 := 120; //ось y
//построение осей
with form1.Canvas do
  begin // рисуем оси
    MoveTo(x0,25);    // ось х
    LineTo(x0,750);
    MoveTo(700,y0);    // ось у
    LineTo(25,y0);
     TextOut(135, 125, '0');
      TextOut(700, 114, '>');
      TextOut(146, 24, '^');
       TextOut(700, 125, 'x');
       TextOut(160, 24, 'y');

    while x1<x2 do
      begin
      kx := s div Round(b - a); //кол-во пикселей в ед. отрезке по х
      y1 := sqrt(sqr(x1)) + 2; //считаем  для 1-ой фун-ии
      y2 :=sin(sqrt(2*x1)) + cos(x1) ; // считаем  для 2-ой фун-ии
      y3 := (sqrt(sqr(x1)) + 2) - Abs(sin(sqrt(2*x1)) + cos(x1));  //считаем  для 3-ей фун-ии
      xp := x0 + kx*x1;
    {  yp1 := y0 + 10*y1;
      yp2 := y0 + 10*y2;
      yp3 := y0 + 10*y3; } -   вот тут нужен ky
   Pixels[Round(xp),Round(yp1)] := clRed;
     Pixels[Round(xp),Round(yp2)] := clGreen;
      Pixels[Round(xp),Round(yp3)] := clBlue;
      x1 := x1 + dx;        //  пробег от 1-го значения х1 до х2
                      //(проход всех значений от x1 + шаг dx  до x2 с шагом dx)
      end;
end;
end;
end.


Уважаемые форумчане, помогите с задачей. Проблема только в одном, надо найти {ky}. Т.к. {kx} есть, т.е. коэффициент масштаба для ОсиХ, нужно теперь как-то сделать коэф. масштаба для осиУ. Как сказали, нужно находить через мин и макс этих трех заданных функций, найти для них единый коэффициент, т.е. ky. Я не могу разобраться как к сожалению( Я выделили именно ту область, в которой как раз и нужен этот коэффициент kу, сейчас в этой части кода указаны значения 10. Но это не подходит.
Помогите пожалуйста. Заранее вам благодарен.


Это сообщение отредактировал(а) Sannyore - 3.4.2011, 10:51
PM MAIL ICQ Skype   Вверх
cat512
Дата 3.4.2011, 15:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 438
Регистрация: 20.3.2007

Репутация: 1
Всего: 15



Находишь Fмах(x) всех трёх функций. Находишь Ymax(Fmax1, Fmax2, Fmax3) максимальное значение фун. из трёх, найденных на предыдущем этапе. Находишь Fmin(x) всех трёх функций. Находишь Ymin(Fmin1, Fmin2, Fmin3)минимальное значение фун. из трёх, найденных на предыдущем этапе.
ky=Ymax/Ymin
Надеюсь так понятно?


Это сообщение отредактировал(а) cat512 - 3.4.2011, 16:07
PM MAIL   Вверх
Sannyore
Дата 3.4.2011, 16:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 9.3.2010

Репутация: нет
Всего: нет



Так то это понятно, на словах мне почти также сказали, я что-то попробовал, но не получилось у меня(
Не слишком понял как находить именно в этой программе коэф. для Оси У.
PM MAIL ICQ Skype   Вверх
cat512
Дата 3.4.2011, 16:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 438
Регистрация: 20.3.2007

Репутация: 1
Всего: 15



Для твоего кода
Код

var
. . .
  Ymax, Ymin: double;
  Ky: integer;
begin
. . .
xp := x0 + kx*x1;
Ymax := MaxValue([y1, y2, y3]);
Ymin := MinValue([y1, y2, y3]);
Ky := Round(YMax / Ymin);
. . .
end;

PM MAIL   Вверх
Sannyore
Дата 3.4.2011, 22:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 9.3.2010

Репутация: нет
Всего: нет



Спасибо, но вылетают почему-то такие ошибки:
[Pascal Error] Unit1.pas(63): E2003 Undeclared identifier: 'MaxValue'
[Pascal Error] Unit1.pas(63): E2001 Ordinal type required
[Pascal Error] Unit1.pas(64): E2003 Undeclared identifier: 'MinValue'
PM MAIL ICQ Skype   Вверх
cat512
Дата 3.4.2011, 23:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 438
Регистрация: 20.3.2007

Репутация: 1
Всего: 15



Т.е. ты считаешь что, МОЗГ включать вообще не нужно? smile 
Модуль math подключи! 
PM MAIL   Вверх
Sannyore
Дата 3.4.2011, 23:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 9.3.2010

Репутация: нет
Всего: нет



Модуль есть, запусается форма, вылетает ошибка:
First chance exception at $75BDB760. Exception class EInvalidOp with message 'Invalid floating point operation'. Process Project1.exe (2152)

Это сообщение отредактировал(а) Sannyore - 3.4.2011, 23:47
PM MAIL ICQ Skype   Вверх
Keeper89
Дата 4.4.2011, 00:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2580
Регистрация: 26.2.2009

Репутация: 1
Всего: 58



Sannyore, можешь пройтись отладчиком, где падает, вот лень все эти k-итые просматривать smile


--------------------
PM MAIL WWW   Вверх
Sannyore
Дата 4.4.2011, 00:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 9.3.2010

Репутация: нет
Всего: нет



вот что получилось, теперь запускается нормально, без ошибок, но рисует такие корявые грфики
Вот программа сам, посмотрите пожалуйста:

Присоединённый файл ( Кол-во скачиваний: 8 )
Присоединённый файл  ________3.rar 186,32 Kb
PM MAIL ICQ Skype   Вверх
cat512
Дата 4.4.2011, 01:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 438
Регистрация: 20.3.2007

Репутация: 1
Всего: 15



Я начинаю растраиваться за нашу молодёжь, которая вообще не хочет трудиться!!!
Графики получаются такими, потому что у тебя на каждой итерации коэффициент Ку меняется!
Оьсюда следствие - не копируй бездумно код! Чувствую проще самому поправить сие кривое творение smile 
Код

procedure TForm1.Button1Click(Sender: TObject);
const
pi = 3.14;
var
  Scale: Integer;
begin
s:=350;
dx := 0.00003;
x1:= 0;
x2:=pi;
a:= 0;
b :=pi;
x0 := 150; //îñü x
y0 := 120; //îñü y
Ymax := 1;
Ymin := 1;
Scale := 2;
//ïîñòðîåíèå îñåé
with form1.Canvas do
  begin // ðèñóåì îñè
    MoveTo(x0,25);    // îñü õ
    LineTo(x0,750);
    MoveTo(700,y0);    // îñü ó
    LineTo(25,y0);
     TextOut(135, 125, '0');
      TextOut(700, 114, '>');
      TextOut(146, 24, '^');
       TextOut(700, 125, 'x');
       TextOut(160, 24, 'y');

    while x1 < x2 do
    begin
          kx := s div Round(b - a); //êîë-âî ïèêñåëåé â åä. îòðåçêå ïî õ
          y1 := sqrt(sqr(x1)) + 2; //ñ÷èòàåì  äëÿ 1-îé ôóí-èè
          y2 :=sin(sqrt(2*x1)) + cos(x1) ; // ñ÷èòàåì  äëÿ 2-îé ôóí-èè
          y3 := (sqrt(sqr(x1)) + 2) - Abs(sin(sqrt(2*x1)) + cos(x1));  //ñ÷èòàåì  äëÿ 3-åé ôóí-èè
          xp := x0 + kx*x1;
          Ymax := MaxValue([Ymax, y1, y2, y3]);
          Ymin := MinValue([Ymin, y1, y2, y3]);
          ky := Abs(Round(YMax / Ymin)) * Scale;
          x1 := x1 + dx;        //  ïðîáåã îò 1-ãî çíà÷åíèÿ õ1 äî õ2
    end;
    x1:= 0;
    x2:=pi;

    while x1<x2 do
      begin
      y1 := sqrt(sqr(x1)) + 2; //ñ÷èòàåì  äëÿ 1-îé ôóí-èè
      y2 :=sin(sqrt(2*x1)) + cos(x1) ; // ñ÷èòàåì  äëÿ 2-îé ôóí-èè
      y3 := (sqrt(sqr(x1)) + 2) - Abs(sin(sqrt(2*x1)) + cos(x1));  //ñ÷èòàåì  äëÿ 3-åé ôóí-èè
      xp := x0 + kx*x1;
      yp1 := y0 + ky*y1;
      yp2 := y0 + ky*y2;
      yp3 := y0 + ky*y3;
    Pixels[Round(xp),Round(yp1)] := clRed;
     Pixels[Round(xp),Round(yp2)] := clGreen;
      Pixels[Round(xp),Round(yp3)] := clBlue;
      x1 := x1 + dx;        //  ïðîáåã îò 1-ãî çíà÷åíèÿ õ1 äî õ2
                      //(ïðîõîä âñåõ çíà÷åíèé îò x1 + øàã dx  äî x2 ñ øàãîì dx)
      end;
end;
end;



Добавлено через 3 минуты и 39 секунд
Коэффициент Scale меняет масштаб
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Звук, графика и видео"
Girder
Snowy
Alexeis

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делится вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • По вопросам разработки игр стоит заглянуть сюда

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Girder, Snowy.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Звук, графика и видео | Следующая тема »


 




[ Время генерации скрипта: 0.0501 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.