Здравствуйте!
Вот программа, которая рисует коло (за задаными координатами центра и радиусом) и координатную сетку. Помоготе найти координаты точек пересечения круга с координатными осями (их может быть 1, 2, 3 или 4).
Проэкт вложен!
Код:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls;
type
TForm1 = class(TForm)
Image1: TImage;
Button2: TButton;
GroupBox1: TGroupBox;
Label1: TLabel;
Edit1: TEdit;
Label2: TLabel;
Edit2: TEdit;
Label3: TLabel;
Edit3: TEdit;
Button3: TButton;
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
x, y : integer; // координаты центра
r : integer; // радиус
implementation
{$R *.dfm}
procedure TForm1.Button2Click(Sender: TObject); // очистка
begin
Image1.Canvas.Brush.Style := bsSolid;
Form1.Image1.Canvas.Rectangle(0, 0, Image1.Width, Image1.Height);
end;
procedure TForm1.Button3Click(Sender: TObject); // построение координатной сетки
// и круга
var
i : integer;
lx1, lx2 : integer;
maxX, maxY, maxX2, maxY2 : integer;
minX, minY, minX2, minY2 : integer;
xmax, ymax, x0, y0 : integer;
begin
if (Edit1.Text = '') or (Edit2.Text = '') or (Edit3.Text = '') then
begin
ShowMessage ('Заполните поля!');
Form1.Show;
Edit1.SetFocus;
exit;
end;
x := StrToInt (Edit1.Text);
y := StrToInt (Edit2.Text);
r := StrToInt (Edit3.Text);
x := x * 2; //
y := y * 2; // масштаб
r := r * 2; //
Image1.Canvas.Brush.Style := bsClear;
xmax := Image1.Width;
ymax := Image1.Height;
y0 := ymax div 2;
x0 := xmax div 2;
Image1.Canvas.Ellipse(round(x0+(x-r)), round(y0-(y-r)),
round(x0+(x+r)), round(y0-(y+r)));
//построение круга относительно координатной сетки
lx1 := 200; lx2 := 200;
maxX := 800; maxY := 800; maxX2 := 800; maxY2 := 800;
minX := 0; minY := 0; minX2 := 0; minY2 := 0;
with Form1.Image1.Canvas do
begin
for i := 1 to 800 do // построение горизонтальной разметки
begin
Pen.Style := psDot;
MoveTo (maxX, minY);
LineTo (minX, minY);
minY := miny + 40;
end;
for i := 1 to 800 do // построение вертикальной разметки
begin
Pen.Style := psDot;
MoveTo (minX2, maxY2);
LineTo (minX2, minY2);
minX2 := minX2 + 40;
end;
Pen.Style := psSolid;
MoveTo (400, 800); LineTo (400, 0); // ось Y
MoveTo (0, 400); LineTo (800, 400); // ось X
for i := 800 downto 0 do // горизонтальная разцыфровка
begin
TextOut (maxX, maxY - 420, inttostr (lx1));
lx1 := lx1 - 20;
maxX := maxX - 40;
end;
for i := 0 to 400 do // вертикальная разцыфровка
begin
TextOut (maxX2 - 395, minY2, inttostr (lx2));
lx2 := lx2 - 20;
minY2 := minY2 + 40;
end;
end;
end;
end.
Админ: Пользуемся тегами для оформления кода!
Последний раз редактировалось Admin, 26.01.2011 в 11:34.