Показать сообщение отдельно
Старый 28.11.2011, 15:52   #4
Greymem
Нуждающийся
 
Регистрация: 31.05.2010
Сообщений: 63
Написано 3 полезных сообщений
(для 3 пользователей)
Ответ: Пересечение линий

'x11 координаты x первой точки первой линии
'y11 координаты y первой точки первой линии

'x12 координаты x второй точки первой линии
'y12 координаты y второй точки первой линии

'x21 координаты x первой точки второй линии
'y21 координаты y первой точки второй линии

'x22 координаты x второй точки второй линии
'Y22 координаты y второй точки второй линии


Function LinesCrossing:Int(x11:Int, y11:Int, x12:Int, y12:Int, x21:Int, y21:Int, x22:Int, y22:Int)
Local d:Float;
Local d1:Float;
Local d2:Float;
Local t1:Float;
Local t2:Float;
Local x:Float;
Local y:Float;
Local Collision:Int = False

' решаем систему методом Крамера
d = (x12 - x11) * (y21 - y22) - (x21 - x22) * (y12 - y11) ;

If (d = 0) Then Return False;

d1 = (x21 - x11) * (y21 - y22) - (x21 - x22) * (y21 - y11) ;
d2 = (x12 - x11) * (y21 - y11) - (x21 - x11) * (y12 - y11) ;

t1 = d1 / d;
t2 = d2 / d;

If (t1 >= 0 And t1 <= 1 And t2 >= 0 And t2 <= 1) Then
x = t1 * x12 + (1 - t1) * x11;
y = t1 * y12 + (1 - t1) * y11;
Print("Отрезки пересекаются в точке " + X + " " + Y) ;
Collision = True;
Else
Print("Не пересекаются") ;
EndIf;
Return Collision
End Function

(C)Пёрто с форума по PHP
Извините, не помню источника
__________________
Мозги... у них есть метод "Storm"
(Offline)
 
Ответить с цитированием