forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   FAQ и уроки (http://forum.boolean.name/forumdisplay.php?f=110)
-   -   Пересечение линий (http://forum.boolean.name/showthread.php?t=15241)

Glauberov 04.08.2011 16:34

Пересечение линий
 
Как сделать проверку на пересечение линий?

moka 04.08.2011 16:46

Ответ: Пересечение линий
 
Тебе нужны математические функции которые выдадут пересекаются ли линии?
Гугля имеет свои результаты, но если ты не смог нагуглить - попробуй ещё.

Тут ещё ссылка давно лежит.

dsd 06.08.2011 00:28

Ответ: Пересечение линий
 


Greymem 28.11.2011 15:52

Ответ: Пересечение линий
 
'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
Извините, не помню источника


Часовой пояс GMT +4, время: 00:03.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot