Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование в широком смысле слова > Алгоритмика

Алгоритмика Об алгоритмах вообще; методы, обсуждения способов решения

Ответ
 
Опции темы
Старый 30.04.2007, 18:39   #1
moka
.
 
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений
(для 6,863 пользователей)
Формула, нахождения пересечения прямых линий, и их точки пересечения.

Я вот уже давненько ищю хоть концепцию реализации подобной функции, думаю есть и просто формула, но найти пока е удалось.

Мне нужна функция которая будет возвращать, пересекаються ли 2 линии, указав координаты их точек.
И нужна функция нахождения координат точки пересечения.

Я уже обращялся к WarezMan'у, о там был дэлфи пример, так его толком перевести и не удалось, были непонятные баги,хоть код был и понтен. Поэтому прошу по возможности, только теорию/концепцию, ну или пример реализации.

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

Читай
http://local.wasp.uwa.edu.au/~pbourk...ry/lineline2d/
(Offline)
 
Ответить с цитированием
Старый 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)
 
Ответить с цитированием
Старый 01.05.2007, 00:36   #4
moka
.
 
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений
(для 6,863 пользователей)
Re: Формула, нахождения пересечения прямых линий, и их точки пересечения.

Огромное спасибо, домой приду и буду ковырять!
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
расчёт нахождения точки на линии mustaeed MidletPascal 21 15.07.2009 20:48
Точки при пересечении 2-ух окружностей CRASHER 2D-программирование 5 27.04.2009 22:56
Пересечение объектов AndruXa 3D-программирование 15 24.12.2007 06:29
Пересечение лини и окружности. HolyDel Полезные функции 2 11.02.2007 15:33
Пересечение HolyDel Математика 3 04.01.2007 04:21


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


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com