|
Поиск маршрута vba и dwg
|
|||
---|---|---|---|
#18+
exp98, синтаксис поправил, но не очень помогло. к чему приклеить сие... к перебору каждого направления от точки Z2? сверьте, верно ли воспринято описания на картине. Вопросы: 1. Встал остро вопрос с чем сравнивать: т.е. отрезок CD - он имеется и их много. но во первых - сравнив вхождение точки Zt в отрезок Z1Z2 если Zt=Z2, успех и выход, во вторых если съеме моделей коридоров, сразу будут пересечения, то Z0 будет находиться на Z1Z2. Выбирать для перебора отрезки CD, только которые перпендикулярны Z1Z2? тогда как быть со смещенными параллельными осями коридоров? 2. Так я понимаю, что предлагается удалять точки Z2, если Zt в пределах толщины стены. Т.е. заменить отрезок Z1Z2 на отрезок Z1Zt. Верно? Но тогда а) сначала понять какую точку менять, если исходные данные - прямоугольники. Концы осевого отрезка оси коридора найти можно по 4-м точкам коридора, а вот наоборот - не выходит б)и даже если не вносить изменения в модель коридоров(прямоугольников) - нужно снова проверить направления от точки Z2? 3 Самое главное - что откуда вызвать. Пример кода VBA в Эксел будет самым полезным советом. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.12.2014, 07:17 |
|
Поиск маршрута vba и dwg
|
|||
---|---|---|---|
#18+
Bobgos, вечер добрый! Поверьте, не это Вам сейчас важно. Важно понимать схему работы Варианта 3, коль скоро будет использоваться он. Вы действительно полагаете, что по программе разберётесь, не поняв алгоритма? Или Вы тот самый Том Сойер, которому надо было покрасить забор? Мне код сидеть писать 3-5 суток предлагаете? Скажу сейчас только 2 вещи: 1) Сабрутина всё же требует доводки, в т.ч. и по причине того, как именно она будет встраиваться в схему. 2) Bobgosк чему приклеить сие... к перебору каждого направления от точки Z2? Ваш рис. почти не о том. Забудьте о направлениях. Мы строим граф не последовательно в каком-то направлении, а путём перебора всех отрезков и шариков по принципам "близости" и "перебора в ширину". Это основывется на сделанных допущениях о природе прям-ков. По Вар.3 предполагается 3 прохода: У нас есть все срединные линии но нет графа. Начинаем его строить. 1. Начинаем с удобной срединной линии. Т.о. получаем сразу граф из 2-х связных вершин. Затем присоединяем к графу ближайшие срединные линии (из оставшихся на даный момент). К ним присоединяем следующие ближайшие. И т.д., пока что-то находим достаточно близко. 2. Вне графа останется множество свободных срединных линий, т.к. они "далеко" от вершин, которые уже в графе. Поэтому скорее всего они будут присоединены к внутренности отрезка, создавая новую вершину графа, а не к имеющейся вершине графа. В этом месте использ. сабрутину. Zt - здесь ВСЕ концы НЕприсоединённых срединных отрезков. Z1 и Z2 - концы всех присоединённых срединных отрезков. Эти множества точек НЕ пересекаются. Как распалагаются взаимно [Z1, Z2] и Zt заранее неизвестно. 3. Предполагается, что в 1-2 в граф втянули все срединные отрезки. Осталось присоединить шарики. В этом месте также использ. сабрутину. Но! Zt - здесь ВСЕ НЕприсоединённые шарики. [Z1 , Z2] - все дуги графа, они же и срединные отрезки. Мы немного предполагаем как распалагаются взаимно [Z1, Z2] и Zt. ("серые" отрезки на моём рис. НУЖНО не использовать, п.3 можно модифицировать, но об этом позднее, после понимания алгоритма). Да, и постарайтесь не смешивать понятия "дуга графа" и "срединный отрезок". После присоединения к графу срединный отрезок становится дугой. Однако от шарика до ближ. срединного отрезка строим новую дугу и новй отрезок, но он уже НЕ срединный, если там не было прям-ка. Bobgos если исходные данные - прямоугольники. Концы осевого отрезка оси коридора найти можно по 4-м точкам коридора, а вот наоборот - не выходит Как же нет, ежели прям-к задан? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.12.2014, 19:46 |
|
Поиск маршрута vba и dwg
|
|||
---|---|---|---|
#18+
Bobgos, начать рисовать блок-схемы будет хорошим советом. Не держите всё в голове. О, идея! Давайте начнём с конца, с 3-го прохода алгоритма. Исходные: У нас построен граф по всем прям-кам. Этот граф оказался связным. А шарики ещё не присоединены. Ваша блок-схема алгоритма? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.12.2014, 20:00 |
|
Поиск маршрута vba и dwg
|
|||
---|---|---|---|
#18+
exp98Bobgos, начать рисовать блок-схемы будет хорошим советом. Не держите всё в голове. О, идея! Давайте начнём с конца, с 3-го прохода алгоритма. Исходные: У нас построен граф по всем прям-кам. Этот граф оказался связным. А шарики ещё не присоединены. Ваша блок-схема алгоритма? учтем принятые ограничения и правила: а) шарики - одна точка, которая по ближайщему x или y направлению можно связать с одним из осевых отрезков (или коридоров). б) все осевые отрезки строго вертикальны z1(x) = z2(x) или горизонтальны z1(y) = z2(y) Первое что пришло в голову: 1. Перебираем точки A(x,y)- *шарики) точнее их центры. 2. В каждом цикле запускаем алгоритм поиска минимального расстояния до ближайшего отрезка оси коридора для чего 2.1. перебираем направления (+x, +y, -x,-y) 2.2. для каждого ищем ближайшее отклонение от перпендикулярного отрезка дельтаX, дельтаY 2.2.1. сначала установив дельтаYmin=0, дельтаXmin=0 2.2.2. далее подойдет case для вектора по x или y для +x, -x ищем минимальное расстояние (дельтаXmin) до отрезков у которых z1(y) = z2(y). А для +y,-y ищем мин. для отрезков z1(x) = z2(x). например для +-x: дельтаX = iif(Z1(x)>A(x), Z1(x)-A(x),-Z1(x)+A(x)) 'нужно подправить для дельтаYmin= iif(and (дельтаX <> 0, дельтаX<дельтаXmin), дельтаY, дельтаYmin) нужна переменная - минимальное расстояние по x или y и индекс осевого отрезка Z1Z2 для которого расстояние по вектору минимально. и пара условий проверки отрезка, например для вектора по x: z1(y) = z2(y) 3. добавляем ребро графа где первая точка A(x,y), вторая точка графа для ABS(дельтаX)<ABS(дельтаY) это точка B(x=Z1(x), y=A(y)) для ABS(дельтаX)>=ABS(дельтаY) это точка B(x=A(x), y=Z1(y)) 4. ЗАПИСЫВАЕМ ребро на лист графа для текущего потроения .... запускаем поиск пути ... |
|||
:
Нравится:
Не нравится:
|
|||
22.12.2014, 23:16 |
|
Поиск маршрута vba и dwg
|
|||
---|---|---|---|
#18+
BobgosдельтаX = iif(Z1(x)>A(x), Z1(x)-A(x),-Z1(x)+A(x)) чувствую = найдется ближайшее расстояние до отрезка Z1Z2 для которого A(y) выходит за пределы диапазона Z1(y)...Z2(y) - это будет еще одним добавляемым условием. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.12.2014, 23:21 |
|
Поиск маршрута vba и dwg
|
|||
---|---|---|---|
#18+
Bobgos Давно собирался спросить. Было бы хорошо, если прям-ки можно было нарисовать почти до центра шарика. Иначе придётся существенно использовать 2-ю точку, указывающую направление от шарика к коридору, о которой Вы говорили в одном из первых сообщений (см. замечание в конце). Гы)) теперь я недопонял: авторминимального расстояния до ближайшего отрезка оси коридора Но это неважно, предлагаю свой вариант. Допущение (б) я вообще не использую. П.п. с 1. по 4. предлагаю превратить в следующее. Посмотрим на единственный пример плана. На нём видно, что большинство шариков расположены удачно. а) А именно сидят с боку и близко от нужного ПРЯМ-КА. В этом случае вместе с шариком появится дополнительная вершина графа, лежащая на осевом отрезке, а дуга раздробится на 2-е. б) Ещё есть шарик, который сидит близко от торца нужного ПРЯМ-КА. В этом случае новой вершиной графа будет только шарик. Т.к. шарики КАСАЮТСЯ нужной стороны нужного КОРИДОРА, то на этом плане ближайшей стороной будет сторона именно нужного ПРЯМ-КА. И если забыть про замечание в конце, то ближайшим осевым отрезком будет именно нужный. Формально я вижу так: 1. Цикл Для каждого шарика 1.1. Берём центр шарика. 1.2. Вычисляем набор расстояний от него до всех осевых отрезков. Расстоянием будет либо расст. до внутренней т. отрезка, либо до одного из концов отрезка. 1.3. Среди вычисленных расстояний выбираем "наименьшее" расстояние, и берём отрезок для которого это выполняется. В принципе таких отрезков может оказаться несколько. На плане это случай (б), но вдруг будет и (а) тоже. 1.4. Цикл Для каждого найденного отрезка 1.4.1. В зависимости от того, как взаимно располагаются шарик и найденный отрезок, 1.4.2. Если ближайшая точка внутри отрезка, ТО обрабатываем случай (а). CALL procedur1() 1.4.3. Если ближайшая точка есть конец отрезка, ТО случай (б). CALL procedur2() Конец цикла 1.4. Конец цикла 1. 2. Контрольные проверки, что все осевые отрезки и шарики сидят в графе, что граф связный и т.д. 3. Таки да, "запускаем поиск пути". Есть принципиальные возражения, поправки? Замечание. Да, для произвольного плана есть шансы, что если рядом с шириком за углом будет коридор, который значительно Уже нужного нам коридора, то можно ошибочно выбрать узкий. Но если в алгоритме заменить "расстояния до осевых отрезков" на "расстояния до сторон прям-ка", то в большинстве случаев алгоритм выберет то, что надо. Предлагаю сейчас не делать эту замену, а сделать её после написания всего. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.12.2014, 17:38 |
|
Поиск маршрута vba и dwg
|
|||
---|---|---|---|
#18+
Предлагаю некую рыбу для начала. В макросе попробуйте разобраться с назначением массивов, которые описаны как PUBLIC. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.12.2014, 18:03 |
|
Поиск маршрута vba и dwg
|
|||
---|---|---|---|
#18+
Более свежая рыба, более приблИженная к последним пунктам 1,2,3,4. Чего в ней не хватает для полноты? Предыдущая теперь не первой свежести, можнобы и удалить. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2014, 00:06 |
|
Поиск маршрута vba и dwg
|
|||
---|---|---|---|
#18+
Вот улучшенная версия. По сравнению с предыдущим файлом поменял местами некоторые мелкие функциональности. Во всяком случае реализованы низкоуровневые процедуры и можно легко заносить точки в массив POINTS(), и т.о. можно проверить эту часть концепции на вшивость. При этом граф заполнять и необязательно, т.к. он не используется. В конце поместил группу функций для красивой работы с координатами точек - код теперь компактней. Предыдущий файл можно выкинуть. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.12.2014, 23:24 |
|
Поиск маршрута vba и dwg
|
|||
---|---|---|---|
#18+
А здесь координаты: концы отрезков и шарики. Рядом текст выражения, чтобы копи/вставка прямо в эксэл ... и можно проверять. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.12.2014, 00:57 |
|
Поиск маршрута vba и dwg
|
|||
---|---|---|---|
#18+
вложение здесь ... |
|||
:
Нравится:
Не нравится:
|
|||
27.12.2014, 00:57 |
|
Поиск маршрута vba и dwg
|
|||
---|---|---|---|
#18+
Ну вот, доделал пример 3-го прохода. Угрохал весь день. В ходе отладки я пришёл к выводу, что 1-й и 2-й проходы реализуются очень похожим способом, так что самая существенная часть сделана. Конечно, для полноты ещё будут изменения, например уже есть дублирующие друг друга процедуры, а так - годится. Как всегда всё предыдущее можно выкинуть. Исходные отрезки и шарики на листе Лист1. Для него служебный лист Т. Диапазон координат задан в константах макроса. Результат графа см. на листе граф. Поскольку 1-й и 2-й проходы не имитировал, то и начальный граф был пустой, так что не удивляйтесь, что почти все вершины изолированы дргу от друга. И тут как раз наглядно видно, что в ходе вычислений ДУГА может дробиться и исчезать, при этом ОТРЕЗОК в массиве каким был, таким и остался. Зато появились новые точки, ставшие вершинами графа. Я обвёл рамкой 3 области, идущие подряд: - концы отрезков - шарики - вычисляемые точки присоединения шариков, если они новые. И да, значения в графе сейчас = расст. между точками либо 0, если точки не связаны. а для стыковки с нахождением пути, потребуется в дальнейшем заменять 0 на бескон-сть, но контекстная замена заменит также и правильные 0 - это надо в макросе менять. Ну вот, есть материал для развития. Взамен поделитесь, какими макросами экспортировать данные из dwg? Изучать неохота. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.12.2014, 13:29 |
|
Поиск маршрута vba и dwg
|
|||
---|---|---|---|
#18+
Ну просто не знаю, с первого раза файл не крепится, уже не первый раз. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.12.2014, 13:33 |
|
Поиск маршрута vba и dwg
|
|||
---|---|---|---|
#18+
exp98Ну просто не знаю, с первого раза файл не крепится, уже не первый раз.а) включи "быстрый ответ" или б) присоединяй файл после предпросмотра сообщения ... |
|||
:
Нравится:
Не нравится:
|
|||
28.12.2014, 13:35 |
|
Поиск маршрута vba и dwg
|
|||
---|---|---|---|
#18+
Shocker.Pro, да-да, так и показалось, что просмотр сбивает. Или наверно можно без просмотра. Bobgos, если ещё интересуетесь, фактически готово. Только алгоритм пока не очень умный как предполагалось, зато программа закончена малыми усилиями. Здесь ещё есть недоделки - некотрые полезные дуги не создаются, но это легко доработать. Жду Ваших вопросов. Я приложил картинку графа по исходным данным, нарисовано автоматом, не мною. Здесь только топология, без расстояний. Читать её надо так. Номера вершин 1 - 42 - это концы отрезков 43 - 71 - шарики 72 - ... - новые точки, присоединения шариков, стыковки отрезков и т.д. У них могут быть нулевые расстояния, но на рисункеэто конечно не отображено. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.12.2014, 15:21 |
|
Поиск маршрута vba и dwg
|
|||
---|---|---|---|
#18+
Всех с наступающим НГ и каникулами! Не сочтите маньяком. Для проверки нарисовал последний рисунок: коридоры, дуги графа и шарики, из которого сразу увидел ошибки. Они технические, найдём и исправим. В след. году. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.12.2014, 19:46 |
|
Поиск маршрута vba и dwg
|
|||
---|---|---|---|
#18+
Ну ты даёшь! Спасибо огромное. Шампанского к Новому году точно надобно. Последний рисунок уже в dwg? Выложи обновление xls. Глядя на картинку, возникает подозрение что ошибки не только технические. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.12.2014, 05:06 |
|
Поиск маршрута vba и dwg
|
|||
---|---|---|---|
#18+
Ох, и надоело же простыни писать( Рисовал в PHP, т.к. нанокад мне осенью активационный код вовремя не дал, и я от них отказался. Просто я хелп эксэла не ставил, а методом тыка графику не нащупал, в инет за справкой - только время терять было. Теоретически могу по фтп сразу заливать рисунок или данные вам куда-нить в папку на сайте. Сейчас в эксел формируется текст программы рисовалки на PHP, а можно и для автокада, если напишете её текст. Об ошибках. Те, что вижу я , предвиделись, но я не ожидал, что они все вылезут ) Я писал, что не сделаны умные проверки, в основном это обработка "синапсов", 3-х проходов вместо 2-х и новые торцевые отрезки на терминальных вершинах. + настройка радиуса окрестности. В общем, макет программы получен. В результате сейчас: 1) Ищется абсолютный минимум вместо нескольких ближайших. Но его обрабатываю с ошибкой. Это программистская ошибка. Её видно по Г-образным линиям у нижних шаров - ошибочное присоединенние к вертикальной осевой линии вместо конца отрезка. Остальное - это ошибки упрощёной методики. 2) Как раз на виртуальных коридорах сидит шар - перекрёсток типа Y не обработан. Здесь граф к шару пойдёт через стенку что ли? Нет запрета на то, что в этом месте 2 коридора НЕ ДОЛЖНЫ соединяться. 3) Длинные гориз-ные коридоры связаны справа - без объяснения. Скорее это связано с п.1) 4) Не могу понять, то ли я ошибся, то ли 2 коротких вертик-х коридора действительно не стыкуются с горизонтальными? 5) Сдвоенные линии - из-за целочисленных округлений. Кроме того я приравнял расстояния 10=0. 6) А вот , наверное ни из графа, ни из рисунка не видно, что если 2 шара присоединяются к одной линии, то в графе их связь в графе сейчас не создаётся. Это надо исправить. 7) Ну и пока не видно, как я уже писал, ошибочной связи шара с более узким коридором, нежели с более широким нужным. За это пока не брался. Что я ещё не увидел? Белый цвет линий? это эффект сложения противоположных цветов : синий+жёлтый одинаковой интенсивности, расположенные рядом, дают впечатление белого. Сейчас по сути 2 коротких подпрограммы всё делают, а будет штук 10. Сейчас 600 строк и половина комментов, потому так быстро и сделал. В итоге хочу сказать, что даже доводка до перечня 1-7 потребует полной занятости на неделю работы, не меньше. Даже только п.1) уже займёт время. Не обещаю даже, что возьмусь за устранение всех п.1-7. За хорошую плату бы сделал, потому что мой проект закрыли, а за полгода так и не плачено. И время самое удачное для поиска, может придётся переквалифицироваться в управдомы. Всех с НГ! Файл прилагаю. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.12.2014, 20:54 |
|
Поиск маршрута vba и dwg
|
|||
---|---|---|---|
#18+
exp98, круто, если оставить в сторону графику на php то реальный код всего-то 3-4 листа А4. тормоза из-за полурешений - использования формул листа - тоже поправимо. Обращаться к каждой ячейке, не отключая screnupdate... Спасибо большое. Вижу решение не слишком-то и сложно, но требует комплексной доработки. К сожалению, тоже нет возможности полностью посвятить неделю (мне видимо потребуется значительно больше времени) на поиск ошибок. Проще переписать код заново, используя логику, которую принял в файле graf. Объясни какой смысл коде: '' Заглушка. OtrCnt = 0 Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
если затем заносятся настоящие значения? тот же вопрос относительно: Код: vbnet 1. 2. 3. 4. 5.
... |
|||
:
Нравится:
Не нравится:
|
|||
02.01.2015, 20:21 |
|
Поиск маршрута vba и dwg
|
|||
---|---|---|---|
#18+
exp98Ох, и надоело же простыни писать( Рисовал в PHP, т.к. нанокад мне осенью активационный код вовремя не дал, и я от них отказался. Просто я хелп эксэла не ставил, а методом тыка графику не нащупал, в инет за справкой - только время терять было. Теоретически могу по фтп сразу заливать рисунок или данные вам куда-нить в папку на сайте. Сейчас в эксел формируется текст программы рисовалки на PHP, а можно и для автокада, если напишете её текст. для нанокада нужно просто создать массив из точек Arr(x1,y1,z1, x2,y2,z2, x3,y3,z3) вобщем не стоит заморачиваться. учитывая, что нет возможности тестить. Как выяснилось у пользователей стоит только NCad3.1 где модель со слоями не работает, писанная для 5.1. Вобщем в excele и рисовать придется. Интерактивная диаграмма в самый раз подойдет. exp98Об ошибках. Те, что вижу я , предвиделись, но я не ожидал, что они все вылезут ) Я писал, что не сделаны умные проверки, в основном это обработка "синапсов", 3-х проходов вместо 2-х и новые торцевые отрезки на терминальных вершинах. + настройка радиуса окрестности. В общем, макет программы получен. что такое "синапс" не зная. смысл сказонного не доошел. сори. exp98В результате сейчас: 1) Ищется абсолютный минимум вместо нескольких ближайших. Но его обрабатываю с ошибкой. Это программистская ошибка. Её видно по Г-образным линиям у нижних шаров - ошибочное присоединенние к вертикальной осевой линии вместо конца отрезка. Остальное - это ошибки упрощёной методики. да уже с методиками предстоит повозиться. Все больше задумываюсь, что проще посадить обезьянку протыкать точки поворотов для построения графов. Времени займет на 2 часа больше чем прочертить прямоугольники, но зато ошибки кода будут минимальны - лишь ошибки ввода. exp982) Как раз на виртуальных коридорах сидит шар - перекрёсток типа Y не обработан. Здесь граф к шару пойдёт через стенку что ли? Нет запрета на то, что в этом месте 2 коридора НЕ ДОЛЖНЫ соединяться. это в каком месте? exp983) Длинные гориз-ные коридоры связаны справа - без объяснения. Скорее это связано с п.1) согласен, в виду того и комментарий к п.1. exp984) Не могу понять, то ли я ошибся, то ли 2 коротких вертик-х коридора действительно не стыкуются с горизонтальными? в первоначальных координатах все коридоры стыковались. Вроде все то же... видимо п.1. exp985) Сдвоенные линии - из-за целочисленных округлений. Кроме того я приравнял расстояния 10=0. не нашел приравнивания. но это не проблема. На финише будет только одна линия пути по графу. exp986) А вот , наверное ни из графа, ни из рисунка не видно, что если 2 шара присоединяются к одной линии, то в графе их связь в графе сейчас не создаётся. Это надо исправить. действительно не видно. ошибка видимо исправляется переписыванием кода заново. exp987) Ну и пока не видно, как я уже писал, ошибочной связи шара с более узким коридором, нежели с более широким нужным. За это пока не брался. следствие полу-решений формулы эксель и код vba. формулы для первых тестов методов еще бы подошли, но в решении - не айс. exp98Что я ещё не увидел? Белый цвет линий? это эффект сложения противоположных цветов : синий+жёлтый одинаковой интенсивности, расположенные рядом, дают впечатление белого. в php не рисовал никогда - вам виднее. exp98 Сейчас по сути 2 коротких подпрограммы всё делают, а будет штук 10. Сейчас 600 строк и половина комментов, потому так быстро и сделал. В итоге хочу сказать, что даже доводка до перечня 1-7 потребует полной занятости на неделю работы, не меньше. Даже только п.1) уже займёт время. Не обещаю даже, что возьмусь за устранение всех п.1-7. и на том спасибо... если бы не вы, похерил бы идею на корню.... а теперь есть шансы доработать. Правда есть более приоритетные задачи - обеспечить корректными справочниками для шариков и типов линий, создать связи и интерфейс... Визуализация пока на втором плане. exp98 За хорошую плату бы сделал, потому что мой проект закрыли, а за полгода так и не плачено. И время самое удачное для поиска, может придётся переквалифицироваться в управдомы. Всех с НГ! Файл прилагаю. В Новом году желаю много успешных и высокооплачиваемых проектов. В управдомы не стремитесь - талант закопать всегда успеете. Еще раз Спасибо. Решу задачи для того, чтобы визуализация стала полезной - буду вплотную заниматься визуализацией. exp98, Мыло в личку скинь. Будет полезно пообщаться в узком кругу. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.01.2015, 21:01 |
|
Поиск маршрута vba и dwg
|
|||
---|---|---|---|
#18+
Bobgos, подарки от Снегурочки для проверок. С п.1) покончено. Шлите ещё вариант для контроля. Чтобы не было путаницы. Оба рисунка - графы (пусть и с ошибками пока). Один рис. - просто топология, другой - точки расположены в правильных координатах. Для проверки и отладки полезны оба. А переписывать заново - дело хозяйское. По Вашим вопросам: У меня нет "полурешений". Формулы плавно переросли в программу, а затем использовались только для проверок программы. ВХодные данные как ссылка на формульный диапазон - ну это из-за лени. Кто мешает сделать рассчёт в программе? В ВЫходных данных формулы для прямоугольников - тож самое. А выплюнуть готовый скрипт в файл - мне это надо? С эттим как раз обезьяна справится. Дальше. Раздел Констант надо задавать через форму, а сами константы сделать глобальными переменными. Кстати напомню: можете на любой угол повернуть координаты. В программе ничего не изменится, я надеюсь. Для проверки я сместил крайний правый шарик - там видно, что присоединяется он правильно. Можете вместо прям-ков взять трапеции или овалы и без плотной стыковки - только укажите осевые отрезки. "Примеры создания и доступа" - как написано, так и есть - была целостная единица с правильной последовательностью команд. Сейчас возможно она уже неправильная) Есть такой приём. Когда не хочется обдумывать всё долго и заранее или трудно, или думаешь урывками, я начинаю писать комментарии типа блок-схемы. Затем комменты наполняю очевидными командами / процедурами и т.п. Затем порции команд как одна логическая единица копирую в разные места и т.д. - одновременно мне легко вносить изменения в такие порции. Так на скелет наращивается мясо. Оптимизация потом. Но начать с чего-то всегда придётся. За принцип: сделать заведомо простое, может тогда сложного и не останется, пожизненая благодарность препу. А.Комбарову. С Вашим случаем как раз так и получилось. Точки поворотов. С ними как раз всё хорошо, лишняя дуга там отсеится сама Дейкстрой, это пока сейчас здесь ошибка (п. 6). П.2): Найдите на Рис. Шарики 70, 52, 55 - вот эта ситуация из области распознавания сцен. Кто знает заранее, рядом там тупик или нужный коридор? Это надо заранее обозначить признаком или т.п., мы говорили о Лучах. Или запустить 2-й цикл программы. Посмотрите на Шарик 51. Ещё немного и он притянется к нижнему коридору. А к какому правильно? Те же Лучи. Ну и 45-й так же может сработать и т.д. Синапс - ну это для сложных ветвлений. А пока навеяло как обойтись уже сделанным. П. 6) я легко сделаю автоматической постобработкой, пол дня как-нить выделю. Поскольку из Варианта 3 я объединил 1-й и 2-й прогоны и недореализовал их, то ввести постобработку, устраняющую недостатки, т.е. 4-й этап. Например ручками (кроме п.6) тыкается, что надо удалить или что исправить. Поскольку программа модульная, это легко сделать зациклив её на 2-й круг, но предварительно надо задать фильтры на вершины и дуги, а граф 2-й раз не инициировать. А для фильтров надо вместо моих циклов последовательного перебора по i,j: Otr(i) или PNTS(j) по точкам или отрезкам, вести перебор по фильтрам-спискам: Otr( ListO.next), PNTS( ListP.next) и т.д. Это действительно легко и просто. А например, для простой правки как у Шарика 70, можно оставить в фильтре только его и прям-к 19 и напустить на них алгоритм ещё раз. Тогда граф пополнится ещё одной дугой. В общем такие простые костыли практически без программирования. А можно наделать костылей на разные случаи по мере их появления и т.п. В любом случае без постобработки в Вашей задаче не обойтись, и уж глазками всегда надо смотреть для проверки. Кстати, 5-й этап - автодиагностика нужна ВХодных и ВЫходных данных. Кроме постобработки есть варианты: процедуры - это те же макросы, их можно в ячейках использовать с нужными параметрами, не завершая основную программу. Насчёт РНР. РНР запускается из эксела командой SHELL(). А так всё легко переложить на нём, и ГУИ сделать в браузере, javascript позволяет. По крайней мере простейший интерактивный графический редактор графа с перетаскиванием мышью нужных обектов на их правильное место. Только это не очень быстро сделать, зато лицензионная чистота 100% и кроссплатформенно. Вместо РНР есть питон,перл и т.п. Вы можете эту обработку разместить на сервере, а в браузере получать результат на планшет, загорая на пляже. И т.д., главное вовремя заткнуть фонтан идей. А можно найти готовый редактор векторных объектов и редактировать там. А если в редакторе ещё и макросы можно ... Вы сами видите, что даже мелких улучшений полно, и просто так тратиться на это желания нет. Основную идею я для себя проверил хотите пользуйтесь, не хотите - нет. Да я и без лички могу: alp98 (cat) ya. ru, надеюсь понятно. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.01.2015, 23:58 |
|
Поиск маршрута vba и dwg
|
|||
---|---|---|---|
#18+
Bobgos, ну что же, погодка блгаоприятствовала. Это вроде всё, что я обещал. Макрос во вложении. Получилось даже лучше и проще, чем ожидал. Граф далеко не оптимальный, но и неважно, это макет. Проверять можно, отключая запись на лист дуг для тех или иных вершин. Стыковку 2-х и более виртуальных коридоров с одним шаром можно обеспечить на 2-м (3-м ...) прогоне разными способами. Например, отключив сравнение шара с уже подключённым отрезком => он соединится с другим прям-ком. А можно открыть окно Imidiate, и непосредствено в нём выполнить команду вида GR(i,j)=1400 или какое там расстояние д.б. Или создать чёрный список. Теперь отмазка! Как в любой задаче распознавания возможны 2 типа ошибок: 1-го и 2-го рода, об этом я уже упоминал. Немножко регулировать можно отсевом по расстоянию, а если нет, то для каждого плана руками. Вместо бесконечности я заносил константу NOL=-1 - это к вопросу о стыковке с поиском пути. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.01.2015, 21:52 |
|
|
start [/forum/topic.php?fid=61&msg=38844284&tid=2173670]: |
0ms |
get settings: |
10ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
52ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
60ms |
get tp. blocked users: |
2ms |
others: | 14ms |
total: | 176ms |
0 / 0 |