Страницы: Пред. 1 2 3
RSS
Как убрать замыкание ломаной линии
 
Цитата
БМВ написал:
и они никогда не пересекутся
Естественно, алгоритма решения краевой задачи SkyGreen не представил. Посему было выполнено только явно обозначенное - не рисовать замыкание. Но суть-то алгоритма осталась таже осталась та же. Просто выполняется "соединение" начальной и конечной точки как векторов. Будет алгоритм рисования концов - будет и его решение.
 
SkyGreen, я бы порекомендовал внимательнее ознакомиться с темой по ссылке из #2, согласиться с тем, что это именно то, что нужно, и сделать макрос на основе предложенных там алгоритмов.
 
Цитата
SkyGreen написал:
Что же делать ?
обьяснить задачу
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Запиши макрорекордером удаление сегмента.
 
Цитата
Ігор Гончаренко написал:
обьяснить задачу
Вообще-то задача объяснена в посте 41.
Изменено: Лунтик - 30.09.2019 17:44:16
 
Цитата
Лунтик написал:
Вообще-то задача объяснена в посте 41
на каком основании поставлены первая и последняя точки? Готовы объяснить?
 
Цитата
Лунтик написал:
Вообще-то задача объяснена в посте 41.
прицитируйте фразы из 41, где описаны правила определения положения первой и последней точек
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Лунтик,
:) с темой можно попращатся
Лень двигатель прогресса, доказано!!!
 
Сергей, только с решением. Думаю тема из трех листов без решения уже не тема.
По вопросам из тем форума, личку не читаю.
 
Сергей, БМВ, зря вы так. А вдруг Лунтик пошёл перечитывать учебник геометрии (достаточно за 7 класс)? К утру и выдаст на гора - что делать (там же действительно нет ничего сложного, если требуется определение положения начальной и конечной точки) :)
 
Цитата
Андрей VG написал:  Сергей ,  БМВ , зря вы так.
А че сразу медведь?!!!  :D .

Цитата
Андрей VG написал: учебник геометрии
потом тригонометрии, потом арифметики...  и это макрорекордером не пишется
Цитата
Лунтик написал: Запиши макрорекордером удаление сегмента.
Вы сами пробовали?

Андрей, ну понятно что в идеале ТСу нужно чтоб конечные точки лежали на нормали проведенной через конец(начало) исходной ломаной, но с учетом,
Цитата
SkyGreen написал:
И бог с ними с точками - мне только этот последний отрезок надо макросом удалить.
можно шаманить с исходным скриптом, но дело в том, что там точки похоже  ищутся со смещением. то есть сперва находится точка пересечений 1го и 2го отрезка, потом 2го и 3го …. и в самом конце самая первая точка получается. При замкнутом контуре - это не важно, но для разомкнутого надо смещать точки на один индекс назад.
Изменено: БМВ - 01.10.2019 07:56:07
По вопросам из тем форума, личку не читаю.
 
Цитата
БМВ написал:
то есть сперва находится точка пересечений 1го и 2го отрезка, потом 2го и 3го
Не, Михаил. Решение по сути - такое же, как у меня (судя по манере кода - очень похоже, что писал Inexsu). Находим вектор биссектрисы уга (с поправкой на угол между векторами более 180). Приводим к единичному. Решением прямоугольного треугольника находим требуемое приращение от вершины биссектрисы к новой точке. В предложенном коде, если исходить из
Цитата
БМВ написал:
проведенной через конец(начало)
достаточно поменять порядок указания вершин в вызове setdXdY для первой/последней точки.
 
Цитата
Андрей VG написал:
похоже, что писал  Inexsu
это про декомпозицию? Возможно, странно что не функции.
По вопросам из тем форума, личку не читаю.
 
Андрей VG, вот тут на рисунке правильно нарисовано.
 
Крошечные изменения.
Код
'Процедура рисования контура полилинии.
'shp - ссылка на исходную полилинию.
'd - расстояние от исходной полилинии до рисуемого контура.
'leftHand - True, если обход идет по правилу левой руки, False иначе.
Sub PolylineСontour(ByVal shp As Shape, ByVal d As Double, ByVal leftHand As Boolean)
    Dim polyPoints() As GeomPoint, polyPoints2() As Single
    Dim ls() As GeomLine, l As GeomLine
    Dim i As Long, n As Long
    GetPolylinePoints shp, n, polyPoints
    ReDim ls(1 To n)
    For i = 1 To n
        GetLine polyPoints(i), polyPoints(i Mod n + 1), l
        GetParallelLine2 l, d, leftHand, ls(i)
    Next
    ReDim polyPoints2(1 To n, 1 To 2) As Single
    For i = 1 To n
        GetIntersectionPoint ls(i), ls(i Mod n + 1), polyPoints(i)
        polyPoints2(i Mod n + 1, 1) = polyPoints(i).x
        polyPoints2(i Mod n + 1, 2) = polyPoints(i).y
    Next
   
    Set shp = shp.Parent.Shapes.AddPolyline(polyPoints2)
    shp.Fill.Visible = msoFalse
    shp.Line.ForeColor.RGB = 0
    shp.Line.DashStyle = msoLineDash
End Sub
По вопросам из тем форума, личку не читаю.
 
БМВ,теперь вроде все работает нормально.
Спасибо большое.
Страницы: Пред. 1 2 3
Наверх