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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 27.03.2013, 22:23   #1
s2df
Пользователь
 
Регистрация: 26.03.2013
Сообщений: 15
По умолчанию Система координат delphi7

Здравствуйте,помогите пожалуйста.Как нарисовать систему координат и разделить горизонтальную ось на некоторое число равных отрезков и завести глобальный массив, в котором количество элементов соответствует количеству отрезков.Спасибо.
s2df вне форума Ответить с цитированием
Старый 27.03.2013, 23:36   #2
MariaD
Пользователь
 
Аватар для MariaD
 
Регистрация: 10.01.2013
Сообщений: 56
По умолчанию

вот программа которая чертит систему координат, только тут без стрелочек на концах отрезков

Код:
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;
    Edit1: TEdit;
    Label1: TLabel;
    Edit2: TEdit;
    Edit3: TEdit;
    Label2: TLabel;
    Label3: TLabel;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure GetDataForArea;
    procedure DrawArea;
    procedure DrawOsX;
    procedure DrawOsY;
    procedure DrawFunc;
    //procedure GetDataForOsY;
  private
    { Private declarations }
  public
    { Public declarations }
  end;

type
  os = record
    x0,y0,xk,yk:integer;
    argMin,argMax:real;
    kSh,dSh,hSh:integer;
    raz:integer;
    StL,Stxk,Styk:integer; Stalf:real;
  end;
  func = record
    gMASxy:array[0..100] of Tpoint;
    MASy,MASx:array[0..100] of real;
    yMax,yMin,xMax,xMin:real;
    kt:integer;
    Mx,My:real;

  end;
  oblast = record
    x0,y0,xk,yk:integer;
    otstup:integer;
  end;

var
  Form1: TForm1;
  osX,osY:os;
  F:func;
  Area:oblast;
implementation

{$R *.dfm}
function ff(x:real):real;
begin
ff:=sin(3*x)+2.5;
 end;
procedure GetDataForOsX;
begin
  OsX.x0:=Area.x0; OsX.y0:=Area.yk;
  OsX.xk:=Area.xk; OsX.yk:=Area.yk;
  OsX.raz:=OsX.xk-OsX.x0;
end;

procedure GetDataForOsY;
begin
  OsY.x0:=Area.x0; OsY.y0:=Area.yk;
  OsY.xk:=Area.x0; OsY.yk:=Area.y0;
  OsY.raz:=OsY.y0-OsY.yk;
end;

procedure TForm1.GetDataForArea;
begin
  with Area do begin
    x0:=Area.otstup;
    y0:=Area.otstup;
    xk:=Image1.Width-otstup;
    yk:=Image1.Height-otstup;
  end;
end;

procedure TForm1.DrawArea;
begin
  GetDataForArea;
  Image1.Canvas.Pen.Color:=clYellow;
  Image1.Canvas.Rectangle(area.x0,area.y0,area.xk,area.yk);
end;

procedure TForm1.DrawOsX;
Var i,x,dx:integer;
begin
  GetDataForOsX;
  Image1.Canvas.Pen.Color:=clBlack;
  Image1.Canvas.MoveTo(OsX.x0,OsX.y0);
  Image1.Canvas.LineTo(OsX.xk,OsX.yk);
  x:=OsX.x0; dx:=(OsX.xk-OsX.x0)div OsX.kSh;
  For i:=1 to OsX.ksh do begin
    Image1.Canvas.MoveTo(x,OsX.y0+OsX.hSh div 2);
    Image1.Canvas.LineTo(x,OsX.y0-OsX.hSh div 2);
    x:=x+dx;
  end;
end;

procedure TForm1.DrawOsY;
Var i,y,dy:integer;
begin
  GetDataForOsY;
  Image1.Canvas.Pen.Color:=clBlack;
  Image1.Canvas.MoveTo(OsY.x0,OsY.y0);
  Image1.Canvas.LineTo(OsY.xk,OsY.yk);
  y:=OsY.y0; dy:=(OsY.yk-OsY.y0)div OsY.kSh;
  For i:=1 to OsY.ksh do begin
    Image1.Canvas.MoveTo(OsY.x0-OsY.hSh div 2,y);
    Image1.Canvas.LineTo(OsY.x0+OsY.hSh div 2,y);
    y:=y+dy;
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var  i:integer; dx,x:real;
begin
  F.kt:=StrToInt(Edit1.Text);
  F.xMin:=StrToFloat(Edit2.Text);
  F.xMax:=StrToFloat(Edit3.Text);
  x:=F.xMin;dx:=(F.xMax-F.xMin)/(F.kt - 1);
  F.yMin:=1e+38;
  F.yMax:=-1e+38;
  For i:=1 to F.kt do begin
      F.MASy[i]:=ff(x); F.MASx[i]:=x;
      if f.MasY[i]<f.yMin then F.yMin:=F.MasY[i];
      if f.MasY[i]>f.yMax then F.yMax:=F.MasY[i];

      x:=x+dx;
  end;

end;

procedure GetMxMy;
begin
  F.Mx:=(Osx.xk-Osx.x0)/(F.xMax-F.xMin);
  F.My:=(Osy.y0-Osy.yk)/(F.yMax-F.yMin);
end;

procedure TForm1.DrawFunc;
var x,y,i:integer;
begin
  //Image1.Canvas.MoveTo(250,150);
  x:=area.otstup+round(F.Mx*F.masx[1]);
  y:=area.otstup+osY.raz-round(F.My*(F.masy[1]-f.yMin));
  Image1.Canvas.MoveTo(x,y);
  for i:=2 to f.kt do begin
    x:=area.otstup+round(F.Mx*F.masx[i]);
    y:=area.otstup+osY.raz-round(F.My*(F.masy[i]-f.yMin));
    Image1.Canvas.lineTo(x,y);
  end;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  DrawArea;
  DrawOsX;
  DrawOsY;
  GetMxMy;
  DrawFunc;
end;


procedure TForm1.FormCreate(Sender: TObject);
begin
  Area.otstup:=15;
  osX.hSh:=8; osX.kSh:=10;
  osY.hSh:=8; osY.kSh:=10;

end;

end.
MariaD вне форума Ответить с цитированием
Старый 27.03.2013, 23:50   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А чего так сложно?
Код:
unit Unit1;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs;

type

  { TForm1 }

  TForm1 = class(TForm)
    procedure FormPaint(Sender: TObject);
    procedure FormResize(Sender: TObject);
  private
    { private declarations }
  public
    { public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.lfm}

{ TForm1 }

procedure TForm1.FormPaint(Sender: TObject);
const id=50;jd=10;lr=10;
var i,j:integer;
begin
 with Canvas do begin
  MoveTo(0,Height div 2);LineTo(Width,Height div 2);
  MoveTo(Width div 2,0);LineTo(Width div 2,Height);
  for i:=0 to Width do begin
   MoveTo(Width div 2-lr,i*id);LineTo(Width div 2+lr,i*id);
   TextOut(Width div 2+lr,i*id,format('%3d',[i*id]));
  end;
  for i:=0 to Height do begin
   MoveTo(i*id,Height div 2-lr);LineTo(i*id,Height div 2+lr);
   TextOut(i*id,Height div 2+lr,format('%3d',[i*id]));
  end;
 end;
end;

procedure TForm1.FormResize(Sender: TObject);
begin
  Repaint;
end;

end.
не?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 28.03.2013, 10:11   #4
s2df
Пользователь
 
Регистрация: 26.03.2013
Сообщений: 15
По умолчанию

Спасибо вам всем большое)
s2df вне форума Ответить с цитированием
Старый 28.03.2013, 10:14   #5
s2df
Пользователь
 
Регистрация: 26.03.2013
Сообщений: 15
По умолчанию

Цитата:
Сообщение от MariaD Посмотреть сообщение
вот программа которая чертит систему координат, только тут без стрелочек на концах отрезков

Код:
unit Unit1;

....

procedure TForm1.Button2Click(Sender: TObject);
begin
  DrawArea;
  DrawOsX;
  DrawOsY;
  GetMxMy;
  DrawFunc;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  Area.otstup:=15;
  osX.hSh:=8; osX.kSh:=10;
  osY.hSh:=8; osY.kSh:=10;

end;

end.
А почему когда водишь данные в edit1 2 3.И после этого жмешь на button ничего не строится?(Спасибо)

Последний раз редактировалось s2df; 28.03.2013 в 11:38.
s2df вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Система координат в Qt lecume Qt и кроссплатформенное программирование С/С++ 1 20.01.2011 10:06
Система координат (JavaScript) IliaGT Помощь студентам 1 04.05.2010 17:03
Система координат устройств AJlxuMuk Win Api 1 08.10.2009 22:19
квадрат и система координат=) kolduev Помощь студентам 8 11.03.2008 19:11
Система координат SunKnight Общие вопросы Delphi 2 05.02.2008 19:42