|
|
ru.algorithms- RU.ALGORITHMS ---------------------------------------------------------------- From : Egorov Pavel 2:5080/169.35 12 Jul 2001 20:32:28 To : Nick Gorinov Subject : Отрезки -------------------------------------------------------------------------------- On Thursday July 05 2001 you wrote to eandr@com2com.ru: >>> Два отрезка заданы координатами начала и конца. Как определить e>> пересекаются >>> ли они, и если пересекаются, то найти координаты точки пересечения? NG> кстати о птичках... если прямую задавать уравнением y=kx+b - приходится NG> рассматривать частный случай при вертикальной прямой, если задавать ур-е NG> вида ax + by + c = 0 - как решать системы таких уравнений без рассмотрения NG> частных случаев? NG> Зы: a,b,c могут быть = 0 Прав ты, короче, на все сто! Ужасно отвратное это занятие вбивать алгоритму так как тут все советуют (вбивать не пробовали поди...:), хотя и вполне выполнимое. А я вот умею решать такую задачку СОВСЕМ без частных случаев! Вот смотри: { Функция Cross проверяет пересекаются ли интервалы AB и CD } { по координатам их концов (векторная алгебра FOREVER!!!) } Program Cross_Check; var xa,xb,xc,xd : Real; ya,yb,yc,yd : Real; Function Cross(xa,ya,xb,yb,xc,yc,xd,yd : Real) : Boolean; Function Check(xa,ya,xb,yb,xc,yc,xd,yd : Real) : Boolean; begin xb:=xb-xa; xc:=xc-xa; xd:=xd-xa; yb:=yb-ya; yc:=yc-ya; yd:=yd-ya; Check:= ((xc*yb-xb*yc>=0) and (xb*yd-xd*yb>=0) and (xc*yd-xd*yc>=0)) or ((xc*yb-xb*yc<0) and (xb*yd-xd*yb<0) and (xc*yd-xd*yc<0)) end;{Check} Begin Cross:=Check(xa,ya,xb,yb,xc,yc,xd,yd) and Check(xb,yb,xa,ya,xc,yc,xd,yd) end;{Cross} Procedure InpData; var F : Text; Begin Assign(F,'input.txt'); Reset(F); Readln(F,xa,ya); Readln(F,xb,yb); Readln(F,xc,yc); Readln(F,xd,yd); Close(F) end;{InpData} Begin InpData; Writeln(Cross(xa,ya,xb,yb,xc,yc,xd,yd)) end. Правда это не для отрезков, а для интервалов. Для отрезков я что-то тоже придумывал, но оно потерлось и пропало, а придумывать заново лень. Если кто не понял как работает - не судьба (шутка :) спрашивайте - вспомню и отвечу) Hу, Все! Пока Nick. --- GoldED/386 3.00.Alpha3+ * Origin: 2+2=4 это не тождество, а выражение равное TRUE (2:5080/169.35) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.algorithms/39993b4e0b08.html, оценка из 5, голосов 10
|