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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Найти точку пересечения прямых 
:(
    Опции темы
Poseidon
Дата 19.5.2005, 01:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi developer
****


Профиль
Группа: Комодератор
Сообщений: 5273
Регистрация: 4.2.2005
Где: Гомель, Беларусь

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



Код
// determine if 2 line cross given their end-points 
function LinesCross(LineAP1, LineAP2, LineBP1, LineBP2 : TPoint) : boolean; 
Var 
  diffLA, diffLB : TPoint; 
  CompareA, CompareB : integer; 
begin 
  Result := False; 

  diffLA := Subtract(LineAP2, LineAP1); 
  diffLB := Subtract(LineBP2, LineBP1); 

  CompareA := diffLA.X*LineAP1.Y - diffLA.Y*LineAP1.X; 
  CompareB := diffLB.X*LineBP1.Y - diffLB.Y*LineBP1.X; 

  if ( ((diffLA.X*LineBP1.Y - diffLA.Y*LineBP1.X) < CompareA) xor 
       ((diffLA.X*LineBP2.Y - diffLA.Y*LineBP2.X) < CompareA) ) and 
     ( ((diffLB.X*LineAP1.Y - diffLB.Y*LineAP1.X) < CompareB) xor 
       ((diffLB.X*LineAP2.Y - diffLB.Y*LineAP2.X) < CompareB) ) then 
    Result := True; 
end; 

function LineIntersect(LineAP1, LineAP2, LineBP1, LineBP2 : TPoint) : TPointFloat; 
Var 
  LDetLineA, LDetLineB, LDetDivInv : Real; 
  LDiffLA, LDiffLB : TPoint; 
begin 
  LDetLineA := LineAP1.X*LineAP2.Y - LineAP1.Y*LineAP2.X; 
  LDetLineB := LineBP1.X*LineBP2.Y - LineBP1.Y*LineBP2.X; 

  LDiffLA := Subtract(LineAP1, LineAP2); 
  LDiffLB := Subtract(LineBP1, LineBP2); 

  LDetDivInv := 1 / ((LDiffLA.X*LDiffLB.Y) - (LDiffLA.Y*LDiffLB.X)); 

  Result.X := ((LDetLineA*LDiffLB.X) - (LDiffLA.X*LDetLineB)) * LDetDivInv; 
  Result.Y := ((LDetLineA*LDiffLB.Y) - (LDiffLA.Y*LDetLineB)) * LDetDivInv; 
end; 

function Subtract(AVec1, AVec2 : TPoint) : TPoint; 
begin 
  Result.X := AVec1.X - AVec2.X; 
  Result.Y := AVec1.Y - AVec2.Y; 
end; 



--------------------
Если хочешь, что бы что-то работало - используй написанное, 
если хочешь что-то понять - пиши сам...
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Звук, графика и видео"
Girder
Snowy
Alexeis

Запрещено:

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

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

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

FAQ раздела лежит здесь!


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

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


 




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


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

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