Главная страница


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)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 Отрезки   Eugene Yadrikhinsky   04 Jul 2001 21:00:00 
 Re: Отрезки   Andrew Ezhguroff   05 Jul 2001 02:14:08 
 Отрезки   Nick Gorinov   05 Jul 2001 09:02:21 
 Re: Отрезки   Serge Kanilo   06 Jul 2001 03:01:14 
 Re: Отрезки   Andrew Ezhguroff   06 Jul 2001 03:09:17 
 Отрезки   Egorov Pavel   12 Jul 2001 20:32:28 
 Re: Отрезки   Serge Kanilo   13 Jul 2001 01:52:24 
 Отрезки   Egorov Pavel   14 Jul 2001 00:38:56 
 Отpезки   Alexander Hritonenkov   05 Jul 2001 03:18:12 
 Отpезки   Roman Vorobets   06 Jul 2001 11:56:40 
 Отpезки   Pavel Girnov   05 Jul 2001 01:40:57 
 Отрезки   Maxim Plaksin   05 Jul 2001 01:12:12 
 RE:Отрезки   Vadim Ajuev   06 Jul 2001 01:19:29 
Архивное /ru.algorithms/39993b4e0b08.html, оценка 1 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional