Показать сообщение отдельно
  #24  
Старый 23.03.2012, 15:14
koroleva25 koroleva25 вне форума
Прохожий
 
Регистрация: 17.03.2012
Сообщения: 32
Репутация: 10
По умолчанию

Здравствуйте! Нужна ваша подсказка.
Будьте добры, посмотрите пожалуйста программу.
1)Правильно ли я написала процедуру масштабирования моей фигуры для соответствующей кнопки? (Т.е. не совсем по дилетантски?)
2)Никак не получается написать код для кнопки « Перенос». Подскажите, если не сложно
3)Возможно ли сделать так, чтобы угол вращения (Label1) менялся не от 0 до 10, а от 0 до 360 градусов ?

unit Unit1;

interface

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

type
TForm1 = class(TForm)
Label1: TLabel;
TrackBar1: TTrackBar;
Image1: TImage;
Button1: TButton;
Button2: TButton;
Edit1: TEdit;
Edit2: TEdit;
Label2: TLabel;
Edit3: TEdit;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
procedure FormCreate(Sender: TObject);
procedure TrackBar1Change(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
procedure DrawCoo;
procedure DrawRect;

public
{ Public declarations }
end;

var
Form1: TForm1;
x0, y0 : Integer;
cosa, sina : Double;
RectCooOrg, RectCooLast : array[0..4] of TPoint;

const
pi2 = 2 * pi;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
x0 := Image1.Width div 2; // центр координатной плоскости по х оси
y0 := Image1.Height div 2; // центр координатной плоскости по у оси
// Координаты
RectCooOrg[0].X := 50;
RectCooOrg[0].Y := 70;
RectCooOrg[1].X := 120;
RectCooOrg[1].Y := 70;
RectCooOrg[2].X := 130;
RectCooOrg[2].Y := 30;
RectCooOrg[3].X := 60;
RectCooOrg[3].Y := 30;
RectCooOrg[4].X := 50;
RectCooOrg[4].Y := 70;

RectCooLast := RectCooOrg;

DrawCoo; // Оси

cosa := cos(pi2 * trackBar1.Position / 360);
sina := sin(pi2 * trackBar1.Position / 360);

DrawRect;// Процедура построения параллелограмма

end;

procedure TForm1.TrackBar1Change(Sender: TObject);
begin
label1.Caption := Inttostr(TrackBar1.Position);
Image1.Canvas.FillRect(Rect(0, 0, Width, Height));

DrawCoo;

cosa := cos(10*pi2 * trackBar1.Position / 100);
sina := sin(10*pi2 * trackBar1.Position / 100);

DrawRect;
end;

procedure TForm1.Button1Click(Sender: TObject); //процедура маштабирования
begin
Image1.Picture:=nil;
DrawCoo;

RectCooOrg[0].X := 50 * (StrToInt(edit1.text));
RectCooOrg[0].Y := 70 * (StrToInt(edit1.text));
RectCooOrg[1].X := 120 * (StrToInt(edit1.text));
RectCooOrg[1].Y := 70 * (StrToInt(edit1.text));
RectCooOrg[2].X := 130 * (StrToInt(edit1.text));
RectCooOrg[2].Y := 30 * (StrToInt(edit1.text));
RectCooOrg[3].X := 60 * (StrToInt(edit1.text));
RectCooOrg[3].Y := 30 * (StrToInt(edit1.text));
RectCooOrg[4].X := 50 * (StrToInt(edit1.text));
RectCooOrg[4].Y := 70 * (StrToInt(edit1.text));

DrawRect;
end;

procedure TForm1.Button2Click(Sender: TObject); //Процедура переноса фигуры
begin
Image1.Picture:=nil;
DrawCoo;

end;

procedure TForm1.DrawCoo; //Построение осей координат
var
m, i : Integer;
begin
m := 25; // масштаб
Image1.Canvas.Pen.Color := clBlack;
// координатная плоскость
Image1.Canvas.MoveTo(0, y0);
Image1.Canvas.LineTo(ClientWidth, y0);
Image1.Canvas.MoveTo(x0, 0);
Image1.Canvas.LineTo(x0, ClientHeight);
// шкалирование осей
for i := -7 to 7 do
begin
Image1.Canvas.MoveTo(x0 + i * m, y0 - 5);
Image1.Canvas.LineTo(x0 + i * m, y0 - (-5));
if I <> 0 then
Image1.Canvas.TextOut(x0 + i * m - 5, y0 + 10, IntToStr(i));

Image1.Canvas.MoveTo(x0 + 5, y0 - m * i);
Image1.Canvas.LineTo(x0 - 5, y0 - m * i);
if I <> 0 then
Image1.Canvas.TextOut(x0 - 20, y0 + i * m - 5, IntToStr(-i));
end;
end;

procedure TForm1.DrawRect; // Построение параллелограмма
var
I : Integer;
begin
Image1.Canvas.Pen.Color := clBlack;

for I := 0 to 4 do
begin
RectCooLast[i].X := Round(RectCooOrg[i].X * cosa - RectCooOrg[i].Y * sina + x0);
RectCooLast[i].Y := Round(RectCooOrg[i].Y * cosa + RectCooOrg[i].X * sina + y0);
end;

Image1.Canvas.Polyline(RectCooLast);
end;

end.
Вложения
Тип файла: rar Работа с фигурой.rar (237.1 Кбайт, 2 просмотров)
Ответить с цитированием