Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 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
                ;D1:=(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
Хи, я тоже нашел функцию, тоже на паскале:

function Intersection(ax1,ay1,ax2,ay2,bx1,by1,bx2,by2:real):boolean;
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;


За бонус тож спасибо :)

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам