Тема: Пересечение отрезков
Здрасте , существует ли функция , которая просто "говорит" пересекаются два ОТРЕЗКА или не пересекаются ?
Информационный портал для профессионалов в области САПР
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
Форумы CADUser → Программирование → VBA → Пересечение отрезков
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Здрасте , существует ли функция , которая просто "говорит" пересекаются два ОТРЕЗКА или не пересекаются ?
Мне нужно знать пересекаются ли два плоских ОТРЕЗКА или нет , точка пересечения меня совсем не интересует.
В LISP'е это делается так:
(inters startPoint_1 endPoint_1 startPoint_2 endPoint_2 flag)
startPoint_1, endPoint_1 - начальная и конечная точки первого отрезка;
startPoint_2, endPoint_2 - начальная и конечная точки второго отрезка;
flag - если равен nil, то функция возвращает точку пересечения прямых, проходящих через заданные отрезки (в товоем случае его можно не указывать).
Если в результате выполнения функции возвращается точка, то отрезки пересекаются, если nil - не пересекаются.
Я думаю в VBA должно быть что-либо подобное.
Удачи.
IntersectWith вернет или точку пересечения, если таковая существует, или ничего, если точки пересечения нет. А координаты точки можно и читать, достаточно проверить, есть-ли возвращаемое значение.
Удачи!
2vk , а не могли бы Вы на примерчике пказать , что значит не вернет ничего ?
Вот слегка модифицированный примерчик из хелпа.
Sub Example_IntersectWith()
' Create the line1
Dim lineObj As AcadLine
Dim startPt1(0 To 2) As Double
Dim endPt1(0 To 2) As Double
startPt1(0) = 1: startPt1(1) = 1: startPt1(2) = 0
endPt1(0) = 5: endPt1(1) = 5: endPt1(2) = 0
Set lineObj1 = ThisDrawing.ModelSpace.AddLine(startPt1, endPt1)
' Create the line2
Dim lineObj2 As AcadLine
Dim startPt2(0 To 2) As Double
Dim endPt2(0 To 2) As Double
'startPt2(0) = -5: startPt2(1) = 1: startPt2(2) = 0 ' нет пересечения
startPt2(0) = 5: startPt2(1) = 1: startPt2(2) = 0 ' пересекаются
endPt2(0) = 1: endPt2(1) = 5: endPt2(2) = 0
Set lineObj2 = ThisDrawing.ModelSpace.AddLine(startPt2, endPt2)
' Find the intersection points between the line and the circle
Dim intPoints As Variant
intPoints = lineObj1.IntersectWith(lineObj2, acExtendNone)
' Print all the intersection points
If LBound(intPoints) < UBound(intPoints) Then
MsgBox "Где-то пересекаются", , "IntersectWith Example"
Else: MsgBox "А нету пересечений", , "IntersectWith Example"
End If
End Sub
2Vk , спасибо Вам за пример , все очень доступно показано!
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Форумы CADUser → Программирование → VBA → Пересечение отрезков
Форум работает на PunBB, при поддержке Informer Technologies, Inc