Список форумов Конференция САПР Bentley MicroStation Конференция САПР Bentley MicroStation
www.ustation.ru
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 

Как найти точку пересечения двух лучей

 
Начать новую тему   Ответить на тему    Список форумов Конференция САПР Bentley MicroStation -> Прикладное
Предыдущая тема :: Следующая тема  
Автор Сообщение
ivsem



Зарегистрирован: 01.02.2006
Сообщения: 63
Откуда: Киев

СообщениеДобавлено: Чт Окт 22, 2009 11:02 am    Заголовок сообщения: Как найти точку пересечения двух лучей Ответить с цитатой

Что-то не могу понять, как получить X Y точки пересечения с помощью функции Boolean = Ray3dRay3dIntersectXY(Ray0, Ray1, Point0, Fraction0, Point1, Fraction1)
Код:

Public Sub Test()
Dim oBoolean As Boolean
Dim oOrigin0 As Point3d
Dim oDirection0 As Point3d
Dim oOrigin1 As Point3d
Dim oDirection1 As Point3d
Dim oRay0 As Ray3d
Dim oRay1 As Ray3d
Dim oPoint0 As Point3d
Dim oPoint1 As Point3d
Dim oFraction0 As Double
Dim oFraction1 As Double

oOrigin0.x = 0#
oOrigin0.y = 0#
oOrigin0.Z = 0#
oDirection0.x = 1#
oDirection0.y = 1#
oDirection0.Z = 0#

oOrigin1.x = 4#
oOrigin1.y = 0#
oOrigin1.Z = 0#
oDirection1.x = 3.5
oDirection1.y = 1#
oDirection1.Z = 0#

oRay0.Origin = oOrigin0
oRay0.Direction = oDirection0
oRay1.Origin = oOrigin1
oRay1.Direction = oDirection1

oBoolean = Ray3dRay3dIntersectXY(oRay0, oRay1, oPoint0, oFraction0, oPoint1, oFraction1)

End Sub

Координаты точки пересечения двух отрезков должны быть X=2.667 Y= 2.667. Как мне "добыть" их из этой функции?
Что за параметры Point0, Fraction0 ...?


Последний раз редактировалось: ivsem (Пн Окт 26, 2009 1:44 pm), всего редактировалось 2 раз(а)
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Leonid
давно здесь сидим


Зарегистрирован: 28.01.2006
Сообщения: 598
Откуда: С.-Петербург

СообщениеДобавлено: Пт Окт 23, 2009 7:48 am    Заголовок сообщения: Ответить с цитатой

Код:

Sub test()

Dim r(1) As Ray3d ' два луча
Dim p(1) As Point3d ' две результирующие точки
Dim f(1) As Double ' зачем этот параметр, я сам не въехал :)
Dim bResult As Boolean

' задаем параметры лучей
r(0).Origin = Point3dFromXY(0#, 0#) ' точка 0,0,0
r(1).Origin = Point3dFromXY(1000#, 1000#) ' точка 1000,1000,0
r(0).Direction = Point3dFromXY(1#, 0#) ' направление +X (1,0,0)
r(1).Direction = Point3dFromXY(0#, -1#) ' направление -Y (0,-1,0)

' определяем точки пересечения
bResult = Ray3dRay3dIntersectXY(r(0), r(1), p(0), f(0), p(1), f(1))

' bResult = true, то есть получаем точки пересечения p(0) и p(1) с координатами 1000,0,0

End Sub
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
ivsem



Зарегистрирован: 01.02.2006
Сообщения: 63
Откуда: Киев

СообщениеДобавлено: Пт Окт 23, 2009 9:44 am    Заголовок сообщения: Ответить с цитатой

Eсли построить, по входным данным выше приведеной программы, два отрезка, то точка их пересечения имеет координаты:
X = 1 Y = 0
Параметры же функции p(0) и p(1) дают точку пересечения
X =1000 Y = 0
????
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Leonid
давно здесь сидим


Зарегистрирован: 28.01.2006
Сообщения: 598
Откуда: С.-Петербург

СообщениеДобавлено: Пт Окт 23, 2009 12:25 pm    Заголовок сообщения: Ответить с цитатой

Входные данные для программы - два луча:
1. из точки 0,0,0 направлением вдоль оси Х
2. из точки 1000,1000,0 направлением обратно оси Y
Эти лучи дают точку пересечения 1000,0,0
Все вроде сходится...
Где я не прав?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
ivsem



Зарегистрирован: 01.02.2006
Сообщения: 63
Откуда: Киев

СообщениеДобавлено: Пт Окт 23, 2009 3:21 pm    Заголовок сообщения: Ответить с цитатой

Просто я считал, что "Direction" задается в абсолютных координатах, а теперь наконец дошло, что это приращения от точки "Origin"
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Leonid
давно здесь сидим


Зарегистрирован: 28.01.2006
Сообщения: 598
Откуда: С.-Петербург

СообщениеДобавлено: Пт Окт 23, 2009 3:39 pm    Заголовок сообщения: Ответить с цитатой

Yes
И кроме того позволю себе заметить, что Direction - это единичный вектор, и к нему не совсем корректно применять понятия "координаты" или "приращения"
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Показать сообщения:   
Начать новую тему   Ответить на тему    Список форумов Конференция САПР Bentley MicroStation -> Прикладное Часовой пояс: GMT + 3
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Powered by phpBB © 2001, 2005 phpBB Group