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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 26.03.2012, 12:41   #1
Sergeevna
 
Аватар для Sergeevna
 
Регистрация: 26.03.2012
Сообщений: 7
Вопрос Delphi график функции с точками во внешнем файле и возможностью построения трехмерной модели

Доброго времени суток. Уже отчаялась и решила попросить помощи...
У меня такая проблема: нужно построить график функции с переменными численно заданными во внешнем файле с возможностью переключения на трехмерную модель этого графика.

На одной форме размещен StringGrid и кнопки Построить график, Записать точки из SG в файл, Запись точек из файла в SG. На второй собчтвенно выводит сам график. Вот в чем загвостка:

Код:

Код:
type
  TGrafik = class(TObject)

  x, y: array of double;

  procedure ZnF (Sender:TObject);      //точки в SG
  procedure Gr (Sender:TObject);        //график
  procedure ZF (Sender: TObject);      //запись из SG
  procedure ChF (Sender: TObject);    //запись в SG
  end;

var
  Form1: TForm1;
  Fun1:TGrafik;
  f1:TextFile;
  maxRow:integer;
implementation

uses Unit2;

{$R *.dfm}


procedure TForm1.FormCreate(Sender: TObject);
begin // При создании формы надо проинициалаизировать таблицу
  with StringGrid1 do
begin // Формрование заголовков столбцов таблицы
  Cells[0,0]:='№';
  Cells[0,1]:='1';
  Cells[0,2]:='2';
  Cells[0,3]:='3';
  Cells[0,4]:='4';
  Cells[0,5]:='5';
  Cells[0,6]:='6';
  Cells[0,7]:='7';
  Cells[0,8]:='8';
  Cells[0,9]:='9';
  Cells[0,10]:='10';
  Cells[1,0]:='X';
  Cells[2,0]:='Y'; 
end;
end;


procedure TForm1.StringGrid1KeyPress(Sender: TObject; var Key: Char);
begin
  if not (Key in ['0'..'9', #8, '-', DecimalSeparator]) then Key:=#0;
end;


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


procedure TForm1.Button1Click(Sender: TObject);
begin
  Fun1:=TGrafik.Create;
  Fun1.ZnF(Sender);
  Fun1.Gr(Sender);
  //Fun1.ZF;
  //Fun1.ChF;
end;


procedure TGrafik.ZnF(Sender:TObject);     
var
  i, RowCount: integer;
  f:boolean;
  tmp:double;
begin
with Form1.StringGrid1 do
  maxRow:=10;
  RowCount:=MaxRow+2;
  for i:=1 to RowCount-1 do
  Form1.StringGrid1.Cells[0,i]:=IntToStr(i); 
  SetLength(x, maxRow);                    //заполнение массивов координат
  SetLength(y, maxRow);
  for i:=0 to maxRow-1 do
begin
  try
  x[i]:=StrToFloat(Form1.StringGrid1.Cells[1,i+1]);
  except
  x[i]:=0;
end;
  try
  y[i]:=StrToFloat(Form1.StringGrid1.Cells[2,i+1]);
  except
  y[i]:=0;
end;
end;
  Form2.PaintBox1.Invalidate; // Перерисовать график
end;


procedure TGrafik.Gr (Sender: TObject);
var
  cx,cy,i,j,xx,yy:integer;
  d:double;
begin
  Form2.Show;
  with Form2.PaintBox1 do
begin                //перерисовка графика
  cx:=width div 2;
  cy:=height div 2;
  if width<height then
  d:=(width-30)/20
  else
  d:=(height-30)/20;

  Canvas.pen.color:=clNavy;  //оси
  Canvas.pen.width:=3;
  Canvas.polyline([point(0,cy), point(width,cy), point(width-10, cy+5),
  point(width,cy),point(width-10,cy-5)]);
  Canvas.polyline([point(cx,height), point(cx,0), point(cx+5,10), point(cx,0),
  point(cx-5,10)]);
  Canvas.pen.color:=clBlack; //насечки
  Canvas.pen.width:=1;
  Canvas.font.name:='small';
  Canvas.font.size:=7;
  Canvas.brush.style:=bsClear; //заливка откл
  for i:=-10 to 10 do
  if i<>0 then
begin
  if i mod 5=0 then j:=5 else j:=3;
  Canvas.Polyline([Point(cx+round(i*d) ,cy-j), Point(cx+round(i*d) ,cy+j+1)]);
  Canvas.Polyline([Point(cx-j,cy+round(i*d)), Point(cx+j+1,cy+round(i*d))]);
  Canvas.TextOut(cx+round(i*d)-4,cy-15, IntToStr(i));
  Canvas.TextOut(cx+10, cy-round(i*d)-5,IntToStr(i));
end;
     // Строим график
  Canvas.Pen.Color:=clMaroon;
  Canvas.Brush.Color:=clYellow;
  for i:=0 to High(x) do
begin
  xx:=cx+round(x[i]*d);
  yy:=cy-round(y[i]*d);
  Canvas.Rectangle(xx-2,yy-2,xx+3,yy+3);
  if i=0 then Canvas.MoveTo(xx,yy) else Canvas.LineTo(xx, yy);
end;
end;
end;


procedure TGrafik.ZF(Sender: TObject);    
var
  i:integer;
begin
  ZnF(Sender);
  Form1.SaveDialog1.Execute;
  AssignFile(f1, Form1.SaveDialog1.FileName);
  Rewrite(f1);
  For i:=0 to maxRow-1 do
begin
  WriteLN(f1, x[i], ' , ', y[i]);              //здесь надо бы добавить округление чисел, а то в файл записывает 'дикими' числами. Не знаю как

end;
  CloseFile(f1);
end;


procedure TGrafik.ChF(Sender: TObject);         //Незнаю как сделать это, всю голову уже сломала. Нужно чтобы из файла числа записывались в SG
var
  i:integer;
  s:string;
begin
  ChF(Sender);
  Form1.OpenDialog1.Execute;
  AssignFile(f1, Form1.OpenDialog1.FileName);
  Reset(f1);

  CloseFile(f1);
end;


procedure TForm1.Button3Click(Sender: TObject);
begin
  Fun1:=TGrafik.Create;
  Fun1.ZF(Sender);
end;


procedure TForm1.Button4Click(Sender: TObject);
begin
  Fun1:=TGrafik.Create;
  Fun1.ChF(Sender);
end;
end.

И вообще не имею понятия как сделать переключатель на 3D модель данного графика.

Прошу помощи магов)

Последний раз редактировалось ACE Valery; 26.03.2012 в 18:55.
Sergeevna вне форума Ответить с цитированием
Старый 26.03.2012, 14:42   #2
Sergeevna
 
Аватар для Sergeevna
 
Регистрация: 26.03.2012
Сообщений: 7
По умолчанию

Буду благодарна любой помощи и подсказке
Sergeevna вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
нетипизированные файлы паскаль - Во внешнем файле создать очередь произвольной длины ololoshqa Помощь студентам 4 23.05.2010 19:44
График Функции Delphi chezz Помощь студентам 8 11.04.2010 17:43
Компонент с возможностью построения линии тренда Alett Компоненты Delphi 3 08.04.2010 17:24
Построение трехмерной модели на С/С++ Vikyshok Помощь студентам 1 05.04.2010 18:30
График функции (delphi 7) Demav Помощь студентам 12 02.07.2009 08:43