Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
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
|
|
|
Вернуться к началу |
|
|
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
Все вроде сходится...
Где я не прав? |
|
Вернуться к началу |
|
|
ivsem
Зарегистрирован: 01.02.2006 Сообщения: 63 Откуда: Киев
|
Добавлено: Пт Окт 23, 2009 3:21 pm Заголовок сообщения: |
|
|
Просто я считал, что "Direction" задается в абсолютных координатах, а теперь наконец дошло, что это приращения от точки "Origin" |
|
Вернуться к началу |
|
|
Leonid давно здесь сидим
Зарегистрирован: 28.01.2006 Сообщения: 598 Откуда: С.-Петербург
|
Добавлено: Пт Окт 23, 2009 3:39 pm Заголовок сообщения: |
|
|
И кроме того позволю себе заметить, что Direction - это единичный вектор, и к нему не совсем корректно применять понятия "координаты" или "приращения" |
|
Вернуться к началу |
|
|
|
|
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах
|
Powered by phpBB © 2001, 2005 phpBB Group
|