![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
![]() Здравствуйте!
Вот программа, которая рисует коло (за задаными координатами центра и радиусом) и координатную сетку. Помоготе найти координаты точек пересечения круга с координатными осями (их может быть 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. |
#2
|
||||
|
||||
![]() составляем уравнение вида:
(X-X0)^2+(Y-Y0)^2=R^2; где X0 и Y0 - координаты центра. Потом подставляем X=0, из квадратного уравнения находим Y: X0^2+Y^2-2YY0+Y0^2-R^2=0; Думаю, решить можно. Если D < 0 корней нет, как обычно. Получишь точки пересечения с осью OY. Потом аналогично для X. jmp $ ; Happy End! The Cake Is A Lie. |