Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Точки прямоугольника, Помогите найти 
:(
    Опции темы
YURIC
  Дата 13.10.2005, 03:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 161
Регистрация: 5.8.2003

Репутация: нет
Всего: 1



Люди помогите разобраться,

у меня есть две точки с координатами X1,Y1 и X2,Y2 необходимо построить прямоугольник вокруг этих точек, т.е. найти координаты четырех углов прямоугольника.

Блин немогу разобраться тупняки напали smile

Обычное приращение координат не помогает т.к. надо учесть еще и угол как это сделать?

smile

--Resize_Images_Alt_Text--
PM MAIL   Вверх
MBo
Дата 13.10.2005, 07:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 234
Регистрация: 10.6.2002

Репутация: 3
Всего: 18



Код

  P: array[0..1] of TPoint;
  NextP: Integer = 0;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
  PP: array[0..3] of TPoint;
  dl: Integer;
  fi0, dx, dy: Double;
begin
  dl := 30;
  fi0 := ArcTan2(P[1].Y - P[0].Y, P[1].X - P[0].X);
  dx := dl * Cos(fi0 - Pi / 4);
  dy := dl * Sin(fi0 - Pi / 4);
  PP[0] := Point(P[1].X + Round(dx), P[1].Y + Round(dy));
  PP[2] := Point(P[0].X - Round(dx), P[0].Y - Round(dy));
  dx := dl * Cos(fi0 + Pi / 4);
  dy := dl * Sin(fi0 + Pi / 4);
  PP[1] := Point(P[1].X + Round(dx), P[1].Y + Round(dy));
  PP[3] := Point(P[0].X - Round(dx), P[0].Y - Round(dy));
  Canvas.Brush.Style := bsClear;
  Canvas.Polygon(PP);
end;

procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  P[NextP] := Point(X, Y);
  NextP := 1 - NextP;
  Canvas.Brush.Style := bsSolid;
  Canvas.Brush.Color := Color;
  Canvas.FillRect(ClientRect);
  Canvas.Rectangle(P[0].X - 2, P[0].Y - 2, P[0].X + 2, P[0].Y + 2);
  Canvas.Rectangle(P[1].X - 2, P[1].Y - 2, P[1].X + 2, P[1].Y + 2);
end;



Это сообщение отредактировал(а) MBo - 13.10.2005, 07:34
PM MAIL   Вверх
YURIC
Дата 13.10.2005, 07:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 161
Регистрация: 5.8.2003

Репутация: нет
Всего: 1



MBo

Блин класно, спасибо, слушай разъясни че к чему если не сложно

Напрмер:

X1:=100;
Y1:=100;

X2:=200;
Y2:=200;

DX:=10;
DY:=10;

Какие координаты будут у углов прямоугольника?

Если не трудно, расскажи как че высчитыается.

PM MAIL   Вверх
MBo
Дата 13.10.2005, 08:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 234
Регистрация: 10.6.2002

Репутация: 3
Всего: 18



Как я понял, тебе нужно разные отступы по длине и ширине линии?
wx - отступ по длине, т.е. вынос концов толстого отрезка за концы короткого
wy- половина ширины толстого отрезка


Код

procedure TForm1.Button1Click(Sender: TObject);
var
  PP: array[0..3] of TPoint;
  dl,wx,wy, fi0, Theta, dx, dy: Double;
begin
  wx := 40;
  wy := 20;
  dl:=Hypot(wx,wy);
  Theta:=ArcTan(wy/wx);
  fi0 := ArcTan2(P[1].Y - P[0].Y, P[1].X - P[0].X);
  dx := dl * Cos(fi0 - Theta);
  dy := dl * Sin(fi0 - Theta);
  PP[0] := Point(P[1].X + Round(dx), P[1].Y + Round(dy));
  PP[2] := Point(P[0].X - Round(dx), P[0].Y - Round(dy));
  dx := dl * Cos(fi0 + Theta);
  dy := dl * Sin(fi0 + Theta);
  PP[1] := Point(P[1].X + Round(dx), P[1].Y + Round(dy));
  PP[3] := Point(P[0].X - Round(dx), P[0].Y - Round(dy));
  Canvas.Brush.Style := bsClear;
  Canvas.Polygon(PP);
end;


PM MAIL   Вверх
YURIC
Дата 13.10.2005, 12:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 161
Регистрация: 5.8.2003

Репутация: нет
Всего: 1



Вот спасибо!

smile
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0645 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.