Показать сообщение отдельно
Старый 30.04.2007, 19:26   #3
Platon
Знающий
 
Регистрация: 04.08.2006
Адрес: Россия
Сообщений: 297
Написано 39 полезных сообщений
(для 70 пользователей)
Re: Формула, нахождения пересечения прямых линий, и их точки пересечения.

А вот и имплементация:
Global Px#, Py#

Function LineLineIntersect(L1x1, L1y1, L1x2, L1y2, L2x1, L2y1, L2x2, L2y2)
	Local L2x2_L2x1# = L2x2 - L2x1
	Local L2y2_L2y1# = L2y2 - L2y1
	Local L1x2_L1x1# = L1x2 - L1x1
	Local L1y2_L1y1# = L1y2 - L1y1
	Local Den# = L2y2_L2y1 * L1x2_L1x1 - L2x2_L2x1 * L1y2_L1y1
	If (Den <> 0) Then
		Local L1x1_L2x1# = L1x1 - L2x1
		Local L1y1_L2y1# = L1y1 - L2y1
		Local Ua# = (L2x2_L2x1 * L1y1_L2y1 - L2y2_L2y1 * L1x1_L2x1) / Den
		Local Ub# = (L1x2_L1x1 * L1y1_L2y1 - L1y2_L1y1 * L1x1_L2x1) / Den
		If (Ua > 0) And (Ua < 1.0) And (Ub > 0) And (Ub < 1.0) Then
			Px = L1x1 + Ua * L1x2_L1x1
			Py = L1y1 + Ua * L1y2_L1y1
			Return True
		EndIf
	EndIf
	Return False
End Function

Graphics(640, 480, 16, 2)
SetBuffer(BackBuffer())

Repeat

	If KeyHit(57) Then
		Cls()
		L1x1 = Rand(1, 639)
		L1y1 = Rand(1, 479)
		L1x2 = Rand(1, 639)
		L1y2 = Rand(1, 479)
		Color(0, 0, 255)
		Line(L1x1, L1y1, L1x2, L1y2)
		
		L2x1 = Rand(1, 639)
		L2y1 = Rand(1, 479)
		L2x2 = Rand(1, 639)
		L2y2 = Rand(1, 479)
		Color(0, 255, 0)
		Line(L2x1, L2y1, L2x2, L2y2)
		
		If LineLineIntersect(L1x1, L1y1, L1x2, L1y2, L2x1, L2y1, L2x2, L2y2)
			Color(255, 0, 0)
			Oval(Px - 4, Py - 4, 8, 8)
		EndIf
	EndIf
	
	Flip()
Until KeyDown(1)
End
немного нечитабельно из-за оптимизации, но думаю сойдет
(Offline)
 
Ответить с цитированием