Страница: 1 |
Страница: 1 |
Вопрос: Пересечение отрезкофф
Добавлено: 28.04.07 12:19
Автор вопроса: AgentFire | ICQ: 192496851
Банальная задачка, сам себе голову загрузил, теперь думаю..
Как определить, пересекаются ли отрезки, если есть координаты начала и конца каждого из них?
Даже точку пересечения находить необязательно.)
Ответы
Всего ответов: 5
Номер ответа: 1
Автор ответа:
GSerg
Вопросов: 0
Ответов: 1876
Профиль | | #1
Добавлено: 28.04.07 13:01
http://www.yandex.ru/yandsearch?text=%F4%EE%F0%EC%F3%EB%E0+%EA%EE%EE%F0%E4%E8%ED%E0%F2%FB+%EF%E5%F0%E5%F1%E5%F7%E5%ED%E8%FF+%EE%F2%F0%E5%E7%EA%EE%E2
Номер ответа: 2
Автор ответа:
Страшный Сон
Вопросов: 46
Ответов: 848
Профиль | | #2
Добавлено: 28.04.07 13:05
Короче говоря точка пересечения есть у непараллельных отрезков.
(L2Y2 - L2Y1) * (L1X2 - L1X1) - (L2X2 - L2X1) * (L1Y2 - L1Y1)
Это выражение у параллельных линий стремиццо к нулю, если оно отличается от нуля - точка пересечения имеется.
Номер ответа: 3
Автор ответа:
AgentFire
ICQ: 192496851
Вопросов: 75
Ответов: 3178
Профиль | | #3
Добавлено: 28.04.07 14:25
Благодарю!!
Номер ответа: 4
Автор ответа:
ZagZag
ICQ: 295002202
Вопросов: 87
Ответов: 1684
Профиль | | #4
Добавлено: 28.04.07 14:31
Гы. Нашел функцию на МидлетПаскале. Извини, преписывать лень
function GetLineIntersection(x11,y11,x12,y12,x21,y21,x22,y22:integer):boolean;
var t1,t2,D,D1,D2:real;c:boolean;
begin
c:=false; D:=(y12-y11)*(x21-x22)-(y21-y22)*(x12-x11);
if (D<>0) then
begin
 1:=(y21-y11)*(x21-x22)-(y21-y22)*(x21-x11); D2:=(y12-y11)*(x21-x11)-(y21-y11)*(x12-x11); t1:=D1/D; t2:=D2/D;
if (t1<=1) and (t1>0) and (t2>=0) and (t2<=1) then c:=true; {x:=x11+(x12-x11)*t1; y:=y11+(y12-y11)*t1;}
end;
GetLineIntersection:=c;
end;
А вот бонус: как определить лежит ли точка на прямой
if (x - x1) * (y2 - y1) - (x2 - x1) * (y - y1) = 0 - Значит лежит
Номер ответа: 5
Автор ответа:
AgentFire
ICQ: 192496851
Вопросов: 75
Ответов: 3178
Профиль | | #5
Добавлено: 29.04.07 14:27
Хи, я тоже нашел функцию, тоже на паскале:
var v1,v2,v3,v4:real;
begin
v1:=(bx2-bx1)*(ay1-by1)-(by2-by1)*(ax1-bx1);
v2:=(bx2-bx1)*(ay2-by1)-(by2-by1)*(ax2-bx1);
v3:=(ax2-ax1)*(by1-ay1)-(ay2-ay1)*(bx1-ax1);
v4:=(ax2-ax1)*(by2-ay1)-(ay2-ay1)*(bx2-ax1);
Intersection:=(v1*v2<0) and (v3*v4<0);
end;
За бонус тож спасибо