Столкнулся с проблемой рисования линии между двумя фигурами, с огибанием этой линией препятствия. Если между двумя фигурами - свободное пространство - то рисуется прямая линия. А если между ними - есть какая-то другая фигура, то рисуется полилиния из трех точек - так чтобы обогнуть препятствие.
Как такое макросом реализовать ? (в настоящий момент макрос - только прямую линию умеет рисовать)
Добрый вечер.
Столкнулся с проблемой рисования линии между двумя фигурами, с огибанием этой линией препятствия. Если между двумя фигурами - свободное пространство - то рисуется прямая линия. А если между ними - есть какая-то другая фигура, то рисуется полилиния из трех точек - так чтобы обогнуть препятствие.
Как такое макросом реализовать ? (в настоящий момент макрос - только прямую линию умеет рисовать)Snegovik
Snegovik, Задача нетривиальная, мне кажется =). Вы рассматриваете только 1 случай, когда между двумя фигурами может быть только 1 фигура (тоесть всего на поле максимум 3 фигуры)?
Snegovik, Задача нетривиальная, мне кажется =). Вы рассматриваете только 1 случай, когда между двумя фигурами может быть только 1 фигура (тоесть всего на поле максимум 3 фигуры)?Roman777
Roman777, имеется ввиду, что на пути - между двумя фигурами - может быть размещена только одна фигура, которую и нужно обогнуть этой линии. Фигур на листе может быть сколько угодно. Но между двумя целевыми фигурами - может быть только одна фигура.
Roman777, имеется ввиду, что на пути - между двумя фигурами - может быть размещена только одна фигура, которую и нужно обогнуть этой линии. Фигур на листе может быть сколько угодно. Но между двумя целевыми фигурами - может быть только одна фигура.Snegovik
Получаете массив координат центров овалов и их радиусов. Перебор в цикле Проверяете, не пересекает ли прямая окружность. Если не пересекла ни одного раза, значит прямая, иначе поллиния.
Получаете массив координат центров овалов и их радиусов. Перебор в цикле Проверяете, не пересекает ли прямая окружность. Если не пересекла ни одного раза, значит прямая, иначе поллиния.doober
Вы не там смотрите. Я показал, как получить массив данных и проверить на пересечение прямой с окружностями. Если есть пересечение, то функция Intersectcircle(Line, Circl) As Boolean вернет True.Вы должны применить ее сами в процедуре Sub Багетнаярамка5_Щелкнуть() на свое усмотрение.
Вы не там смотрите. Я показал, как получить массив данных и проверить на пересечение прямой с окружностями. Если есть пересечение, то функция Intersectcircle(Line, Circl) As Boolean вернет True.Вы должны применить ее сами в процедуре Sub Багетнаярамка5_Щелкнуть() на свое усмотрение.doober
Snegovik, Вот из интереса сделал некое подобие того, что, вродебы Вам нужно. Но есть некоторые упрощения, которые я сделал для "удешевления": 1) В качестве формы фигуры принимаю описывающий её прямоугольник (но на деле можно подставить координаты всех отрезков, образующих фигуру) 2) Линия отрисовывается от центров исследуемых фигур (но добавить отрисовку от граничных точек фигур, лежащих на этом отрезке, не такая уж и большая проблема) 2) Следует из 1-го. Подходит для описывания фигуры отрезками (полилиниями), если это сплайны, нужно работать уже с уравнениями самих фигур. Для этого нужно понимать по какому закону отрисованы все сплайны. 3) Обходная линия нарисована полилинией, а не сплайном, для рисования сплайнами нужно знать уравнение сплайна в экселе (я этого не знаю) 4) Если будет много фигур, то обходная линия может зацепить какую-то 4ю фигуру, которая не находится на пересечении двух исследуемых.
Для поиска точек пересечения лучше, всё-таки, использовать векторную алгебру. В ней нет недостатков, связанных с решением уравнений, описывающих прямые (или другие формы).
Snegovik, Вот из интереса сделал некое подобие того, что, вродебы Вам нужно. Но есть некоторые упрощения, которые я сделал для "удешевления": 1) В качестве формы фигуры принимаю описывающий её прямоугольник (но на деле можно подставить координаты всех отрезков, образующих фигуру) 2) Линия отрисовывается от центров исследуемых фигур (но добавить отрисовку от граничных точек фигур, лежащих на этом отрезке, не такая уж и большая проблема) 2) Следует из 1-го. Подходит для описывания фигуры отрезками (полилиниями), если это сплайны, нужно работать уже с уравнениями самих фигур. Для этого нужно понимать по какому закону отрисованы все сплайны. 3) Обходная линия нарисована полилинией, а не сплайном, для рисования сплайнами нужно знать уравнение сплайна в экселе (я этого не знаю) 4) Если будет много фигур, то обходная линия может зацепить какую-то 4ю фигуру, которая не находится на пересечении двух исследуемых.
Для поиска точек пересечения лучше, всё-таки, использовать векторную алгебру. В ней нет недостатков, связанных с решением уравнений, описывающих прямые (или другие формы).Roman777