Тема: Пересечение отрезков

Здрасте , существует ли функция  , которая просто "говорит" пересекаются два ОТРЕЗКА или не пересекаются ?

Re: Пересечение отрезков

Попробуй метод IntersectWith

Re: Пересечение отрезков

Мне нужно знать пересекаются ли два плоских ОТРЕЗКА или нет , точка пересечения  меня совсем не интересует.

Re: Пересечение отрезков

В LISP'е это делается так:
(inters startPoint_1 endPoint_1 startPoint_2 endPoint_2 flag)
startPoint_1, endPoint_1 - начальная и конечная точки первого отрезка;
startPoint_2, endPoint_2 - начальная и конечная точки второго отрезка;
flag - если равен nil, то функция возвращает точку пересечения прямых, проходящих через заданные отрезки (в товоем случае его можно не указывать).
Если в результате выполнения функции возвращается точка, то отрезки пересекаются, если nil - не пересекаются.
Я думаю в VBA должно быть что-либо подобное.
Удачи.

Re: Пересечение отрезков

Спасибо за ответ!

Re: Пересечение отрезков

IntersectWith вернет или точку пересечения, если таковая существует, или ничего, если точки пересечения нет. А координаты точки можно и читать, достаточно проверить, есть-ли возвращаемое значение.
Удачи!

Re: Пересечение отрезков

2vk , а не могли бы Вы на примерчике пказать , что значит не вернет ничего ?

Re: Пересечение отрезков

Вот слегка модифицированный примерчик из хелпа.
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

Re: Пересечение отрезков

2Vk , спасибо Вам за пример , все очень доступно показано!