|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу. Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста". Название темы слишком короткое или не отражает сути вашего вопроса. Тема исчерпала себя, помните, один вопрос - одна тема Прочитайте правила и заново правильно создайте тему. |
|
Опции темы | Поиск в этой теме |
03.04.2011, 18:43 | #1 |
Пользователь
Регистрация: 03.04.2011
Сообщений: 16
|
Делфи
Помогите нарисовать окружность x^2+y^2=R^2 в декартовой системе в Делфи.Напишите код. Заранее спасибо)))саму окружность я могу нарисовать, но чтобы центр окружности совпадал с центром декартовой системы координат не могу(((
вот код:unit Unit1; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs; type TForm1 = class(TForm) procedure FormCreate(Sender: TObject); procedure FormPaint(Sender: TObject); procedure FormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); procedure FormMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); private P : array [1..3] of TPoint; CPoint : integer; Delta : TPoint; X0 : TPoint; R : integer; procedure ReCalcCircle; public end; var Form1: TForm1; implementation {$R *.DFM} procedure TForm1.FormCreate(Sender: TObject); begin P[1].X := 100; P[1].Y := 100; P[2].X := 150; P[2].Y := 100; P[3].X := 125; P[3].Y := 200; ReCalcCircle; end; procedure TForm1.FormPaint(Sender: TObject); begin if R > 0 then begin Canvas.Brush.Color := clBtnFace; Canvas.Pen.Color := clBlue; Canvas.Ellipse(X0.X-R, X0.Y-R, X0.X+R, X0.Y+R); end; Canvas.Brush.Color := clGreen; Canvas.FillRect(rect(P[1].X-3, P[1].Y-3, P[1].X+3, P[1].Y+3)); Canvas.FillRect(rect(P[2].X-3, P[2].Y-3, P[2].X+3, P[2].Y+3)); Canvas.FillRect(rect(P[3].X-3, P[3].Y-3, P[3].X+3, P[3].Y+3)); end; procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin if (X >= P[1].X-5) and (Y >= P[1].Y-5) and (X <= P[1].X+5) and (Y <= P[1].Y+5) then CPoint := 1 else if (X >= P[2].X-5) and (Y >= P[2].Y-5) and (X <= P[2].X+5) and (Y <= P[2].Y+5) then CPoint := 2 else if (X >= P[3].X-5) and (Y >= P[3].Y-5) and (X <= P[3].X+5) and (Y <= P[3].Y+5) then CPoint := 3 else CPoint := -1; Delta.Y := P[CPoint].X - X; Delta.Y := P[CPoint].Y - Y; end; procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin if CPoint = -1 then exit; P[CPoint].X := X + Delta.X; P[CPoint].Y := Y + Delta.Y; ReCalcCircle; refresh; end; procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin CPoint := -1; end; procedure TForm1.ReCalcCircle; var A, B, x, youble; k0, k1, k2, m0, m1, m2ouble; begin R := -1; k0 := sqr(P[1].X)-sqr(P[2].X) + sqr(P[1].Y)-sqr(P[2].Y); k1 := 2*(P[1].Y-P[2].Y); k2 := 2*(P[1].X-P[2].X); m0 := sqr(P[1].X)-sqr(P[3].X) + sqr(P[1].Y)-sqr(P[3].Y); m1 := 2*(P[1].Y-P[3].Y); m2 := 2*(P[1].X-P[3].X); A := (k2*m0 - k0*m2); B := (k2*m1 - k1*m2); if B = 0 then exit; y := A / B; X0.Y := trunc(y); if abs(m2) > 0.01 then x := (m0 - y * m1) / m2 else if abs(k2) > 0.01 then x := (k0 - y * k1) / k2 else exit; X0.X := trunc(x); R := trunc(sqrt(sqr(P[1].X-x) + sqr(P[1].Y-y))) end; end. Последний раз редактировалось Alexa555; 03.04.2011 в 19:15. |
03.04.2011, 19:11 | #2 |
Заблокирован
Регистрация: 27.05.2010
Сообщений: 1,099
|
Шлепни на форму компонент TShape, выбери там тип шейпа "окружность".
Всех делов).. И ни едитной строчки кода) И препод доволен и мозга не нужно) |
03.04.2011, 19:19 | #3 |
Пользователь
Регистрация: 03.04.2011
Сообщений: 16
|
Но мне нужно, чтобы окружность была нарисована в системе координат(((
|
03.04.2011, 19:32 | #4 |
Форумчанин
Регистрация: 06.12.2010
Сообщений: 300
|
Как то слишком много у вас кода для обычной окружности. Что вы пытаетесь сделать?
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Делфи | ДваДваВо7 | Помощь студентам | 1 | 06.12.2010 21:14 |
Делфи | natasxa | Помощь студентам | 2 | 01.05.2010 23:04 |
Код игры на Паскале и на Делфи сильно отличается? Как переписать код с Паскаля в Делфи? | Mclaren | Помощь студентам | 2 | 27.04.2009 22:37 |
Делфи 7 | Lemo | Софт | 1 | 30.12.2008 14:21 |