Помощь - Поиск - Пользователи - Календарь
Полная версия: Пересечение отрезков
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
WiZarDX
vobsem dany 2 otrezka s koordinatami
(x1 y1) (x2 y2) - 1yj
(x3 y3) (x4 y4) - 2oj

nado ustanovit peresekajutsia oni ili net.
rassmatrivat vse varianty kakije mogut byt.
+ zelatelno poluciat tocku esli oni peresekajuca v vide (x, y)

ocen interesno uznat vase mnenije

В-общем, даны 2 отрезка с координатами:
(x1 y1) (x2 y2) - 1ый
(x3 y3) (x4 y4) - 2ой

надо установить пересекаются они или нет.
Рассматривать все варианты, какие могут быть.
+ желательно получать точки если они пересекаются в виде (x, y)

очень интересно узнать ваше мнение


Вам очень удобно читать свои тексты? А об остальных Вы не удосужились подумать? Или здесь роботы, которым все равно, что и как написано? В следующий раз пишите по-русски (и НЕ латинскими буквами)
volvo
Совершенно стандартное решение:
type
 vec2 = record
   x, y: real;
 end;

function IntersectLineLine(pt11, pt12, pt21, pt22: vec2;
        var pretpt: vec2): boolean;
var
 d, d1, d2, t1, t2: real;
const
 eps = 10E-5;

begin
 IntersectLineLine := false;
 d := (pt12.y - pt11.y)*(pt21.x - pt22.x) -
      (pt21.y - pt22.y)*(pt12.x - pt11.x);
 if abs(d) < eps then exit;

 d1 := (pt12.y-pt11.y)*(pt21.x-pt11.x)-(pt21.y-pt11.y)*(pt12.x-pt11.x);
 d2 := (pt21.y-pt11.y)*(pt21.x-pt22.x)-(pt21.y-pt22.y)*(pt21.x-pt11.x);

 t1:=d1/d;
 t2:=d2/d;
 if not ((t1<=1)and(t1>=0)and(t2>=0)and(t2<=1)) then exit;

 pretpt.x := pt11.x+(pt12.x-pt11.x)*t2;
 pretpt.y := pt11.y+(pt12.y-pt11.y)*t2;
 IntersectLineLine := true
end;

const
 p1: vec2 = (x:1; y:2); { начало первого отрезка }
 p2: vec2 = (x:4; y:1); { конец первого отрезка }
 p3: vec2 = (x:0; y:0); { начало второго отрезка }
 p4: vec2 = (x:2; y:4); { конец второго отрезка }
var res: vec2;

begin
 if intersectLineLine(p1, p2, p3, p4, res) then begin
   write('yes. intersection point:');
   writeln(' x = ', res.x:0:0, ' y = ', res.y:0:0)
 end
 else writeln('no')
end.
WiZarDX
boshoje spasibo protestim
smile.gif

da ja by s radostju pisal russkimi bukvami! tolko vot v komputernom centre RU netu 
sad.gif

Теперь пользуемся кнопкой TRANSLIT
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.