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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> график функции 
:(
    Опции темы
denis2105
  Дата 9.12.2006, 13:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Задача состоит в следующем, нарисовать график функции с возможностью увеличения и уменьшения в дочке x,y. С масштабированием проблем нет, рисует как надо но с увеличением и уменьшением бред получается, весь инет перерыл нечего похожего не нашел.


PM MAIL   Вверх
Guedda
Дата 9.12.2006, 13:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Подрывник
****


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

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



Воспользуйся TChart. 
Воспользуйся канвой.
Покажи код.
Ошибка в 17 строке.


--------------------
Ll 2
PM MAIL WWW ICQ Skype GTalk   Вверх
Sunvas
Дата 9.12.2006, 14:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Соль и сахар
****


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

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



Цитата(denis2105 @  9.12.2006,  13:33 Найти цитируемый пост)
 увеличением и уменьшением бред получается

А что значит "бред"?
Если ты код построения графика не привязываешь к высоте/ширене объекта на котором рисуешь, то последствия могут быть самыми непредсказуемыми.

Это сообщение отредактировал(а) Sunvas - 9.12.2006, 14:39


--------------------
Воспитывая детей по своему образу и подобию, родители почему-то надеются, что они будут лучше их.
PM MAIL   Вверх
denis2105
Дата 9.12.2006, 17:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(Guedda @ 9.12.2006,  13:51)
Воспользуйся TChart. 
Воспользуйся канвой.
Покажи код.
Ошибка в 17 строке.

--==== но это бред ==-====-----
Код

unit main;

interface

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

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Image1: TImage;
    Button4: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure Image1MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  sx,sy:integer;
implementation
{$R *.dfm}
function f_y(x:real):real;
 begin
  f_y:=(((sin(x/2)/cos(x/2)))+cos(x))/(sin(1/x));
 end;
procedure showGraf(dx,dy,scale:integer);
 var x,y,a,b,h,mx,my,xx,yy:real;
 begin
  with Form1 do begin
   a:=0; b:=9.42; h:=0.942;
   my:=dy/(20-(-20));
   mx:=dx/(10-(-10));
   x:=0;
   Image1.Canvas.Pen.Style:=psSolid;
   Image1.Canvas.Rectangle(0,0,500,300);
   x:=x+h;
   image1.Canvas.MoveTo(round(dx/2-x*mx),round(300/2-f_y(x)*my));
   while x<=b-0.94 do begin
    yy:=dy/2-f_y(x)*my;
    xx:=dx/2+x*my;;
    Image1.Canvas.LineTo(round(xx),round(yy));
    x:=x+h;
   end;
  end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
 sx:=500; sy:=300;
 showGraf(sx,sy,0);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
 Close;
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
 Image1.Refresh;
 sx:=sx-20; sy:=sy+10;
 showGraf(sx,sy,1);
end;

procedure TForm1.Button4Click(Sender: TObject);
begin
 Image1.Refresh;
 sx:=sx+20; sy:=sy-10;
 showGraf(sx,sy,1);
end;

procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
 if Button=mbLeft then begin
  sx:=sx-10;
 end;
 if Button=mbRight then begin
  sx:=sx+10;
 end;
 showGraf(sx,sy,1);
end;

end.


PM MAIL   Вверх
Sunvas
Дата 9.12.2006, 18:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Соль и сахар
****


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

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



denis2105, как-то ты так коряво все делаешь... Легче переписать заново, чем искать где ты ошибся.
Что тебе надо? - Чтобы строился график функции
Цитата(denis2105 @  9.12.2006,  17:01 Найти цитируемый пост)
f_y:=(((sin(x/2)/cos(x/2)))+cos(x))/(sin(1/x));

 smile  smile  smile 



--------------------
Воспитывая детей по своему образу и подобию, родители почему-то надеются, что они будут лучше их.
PM MAIL   Вверх
Albinos_x
Дата 9.12.2006, 18:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Evil Skynet
****


Профиль
Группа: Комодератор
Сообщений: 3288
Регистрация: 28.5.2004
Где: X-6120400 Y-1 4624650

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



Цитата(denis2105 @  9.12.2006,  17:01 Найти цитируемый пост)
   my:=dy/(20-(-20));    
   mx:=dx/(10-(-10));

это что за операция... а что так нельзя было:
Код

my:=dy/40;
mx:=dx/20;


инициализация первой точки не верна 
Цитата

image1.Canvas.MoveTo(round(dx/2-x*mx),round(300/2-f_y(x)*my));

она должна быть наподобии с циклом:
Цитата

yy:=dy/2-f_y(x)*my;    
    xx:=dx/2+x*my;;

а утебя даже знаки операции разные... начальная точка фиксированная... вот и получается бред...

и не понятно... зачем сделал так, что при масштабировании график смещается? причём при увеличении - влево, а при уменьшении-вправо????


--------------------
"Кто владеет информацией, тот владеет миром"    
Уинстон Черчилль
PM MAIL ICQ   Вверх
denis2105
Дата 10.12.2006, 15:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Вот переписал, но с увеличением и уменьшением нечего не  получается.
Понятия не имею как это сделать


Код
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Image1: TImage;
    Button1: TButton;
    Button2: TButton;
    procedure Button2Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Image1MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation
{$R *.dfm}
var xtmin,xtmax:integer;

procedure show_f(mx,my:integer; ssx,ssy:double; xma,xmi:integer);
 var x,y:array[1..10]of real;
     i:integer;
     h:real;
     xmin,xmax,ymin,ymax,sx,sy:double;
 begin
  Form1.Image1.Refresh;
  Form1.Image1.Canvas.Pen.Style:=psSolid;
  Form1.Image1.Canvas.Rectangle(0,0,500,300);
  h:=0.94;
  i:=1;
  for i:=1 to 9 do begin
   x[i]:=h;
   y[i]:=(((sin(h/2)/cos(h/2)))+cos(h))/(sin(1/h));
   h:=h+0.94;
  end;
  xmin:=x[1]; xmax:=x[1]; ymin:=y[1]; ymax:=y[1];
  for i:=2 to 9 do begin
   if y[i]<ymin then ymin:=y[i];
   if y[i]>ymax then ymax:=y[i];
   if x[i]<xmin then xmin:=x[i]
   if x[i]>xmax then xmax:=x[i];
  end;
  sx:=Form1.Image1.Width/(xmax-xmin);
  sy:=Form1.Image1.Height/(ymax-ymin);
  with Form1.Image1.Canvas do begin
   moveto(trunc(sx*(x[1]-xmin)),Form1.Image1.height-trunc(sy*(y[1]-ymin)));
   for i:=2 to 9 do begin
    Lineto(trunc(sx*(x[i]-xmin)),Form1.Image1.height-trunc(sy*(y[i]-ymin)));
   end;
  end;
 end;

procedure TForm1.Button2Click(Sender: TObject);
begin
 close;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
 show_f(1,1,1,1,1,1);
end;

procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
 if Button=mbLeft then begin
 ??????????????????????? ++++ ???????????????????????????
//  xtmax:=xtmax+1; xtmin:=xtmax-1;
//  show_f(1,1,1,1,xtmax,xtmin);
 end;
 if Button=mbRight then begin
 ??????????????????????? -----  ???????????????????????????
//  xtmax:=xtmax-1; xtmin:=xtmax+1;
//  show_f(1,1,1,1,xtmax,xtmin);
 end;

end;

end.
 [b][color=#FF0000] [/color]

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

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

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

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


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

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


 




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


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

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