|
|
ru.algorithms- RU.ALGORITHMS ---------------------------------------------------------------- From : Serge Kanilo 2:5020/400 13 Jul 2001 01:52:24 To : All Subject : Re: Отрезки -------------------------------------------------------------------------------- "Egorov Pavel" <Egorov.Pavel@p35.f169.n5080.z2.fidonet.org> wrote in message news:994970376@p35.f169.n5080.z2.ftn... > Прав ты, короче, на все сто! Ужасно отвратное это занятие вбивать алгоритму так > как тут все советуют (вбивать не пробовали поди...:), хотя и вполне выполнимое. > А я вот умею решать такую задачку СОВСЕМ без частных случаев! > 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) Это наверное шутка? Кто будет использовать программу с 24 умножениями (не считая всего остального), для того что, если написать в лоб, может максимально потребовать 20 сравнений и 4 перестановки? > Если кто не понял как работает - не судьба (шутка :) спрашивайте - вспомню и > отвечу) И потом еще вспоминать, как и почему это работает :) Да и для интервалов стянутых в отрезки программа работает неправильно, например Cross(xa,0,xb,0,xc,0,xd,0) - всегда true :( для льбых xa,xb,xc,xd Cheers, Serge --- ifmail v.2.15dev5 * Origin: Excite@Home - The Leader in Broadband http://home.com/f (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.algorithms/210674a8b52e1.html, оценка из 5, голосов 10
|