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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

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

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

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 03.04.2011, 18:43   #1
Alexa555
Пользователь
 
Регистрация: 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.
Alexa555 вне форума
Старый 03.04.2011, 19:11   #2
mss
Заблокирован
 
Регистрация: 27.05.2010
Сообщений: 1,099
По умолчанию

Шлепни на форму компонент TShape, выбери там тип шейпа "окружность".
Всех делов).. И ни едитной строчки кода)
И препод доволен и мозга не нужно)
mss вне форума
Старый 03.04.2011, 19:19   #3
Alexa555
Пользователь
 
Регистрация: 03.04.2011
Сообщений: 16
По умолчанию

Но мне нужно, чтобы окружность была нарисована в системе координат(((
Alexa555 вне форума
Старый 03.04.2011, 19:32   #4
eduard93
Форумчанин
 
Регистрация: 06.12.2010
Сообщений: 300
По умолчанию

Как то слишком много у вас кода для обычной окружности. Что вы пытаетесь сделать?
eduard93 вне форума
Закрытая тема


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Делфи ДваДваВо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