|
||
| Правила | Регистрация | Пользователи | Сообщения за день | | Поиск | | Справка по форуму | Файлообменник | |
|
![]() |
Поиск в этой теме |
![]() |
#1 | |
Содздание дерева построения
студент
Москва
Регистрация: 03.03.2012
Сообщений: 50
|
||
Просмотров: 8268
|
|
||||
Регистрация: 20.03.2008
Сообщений: 2,680
|
Представь, что ты программист, и ничего не знаешь о системах ОВ. Теперь перечитай свой пост и подумай: сможешь написать программу на основании его? Думаю, вряд ли. Даже оценить сложность не удастся. Чтобы хоть что-то стало хоть кому-то понятным, весьма желательно приложить файл с изображением того, что хотелось бы получить, сопроводить всё это пояснениями. Тогда может получиться предметный разговор.
|
|||
![]() |
|
||||
студент Регистрация: 03.03.2012
Москва
Сообщений: 50
|
Цитата:
![]() В итоге мы имеем несколько вариантов при "возврате к точке": 1) пересчитать под новый выбор и заменить все узлы в ветке идущие после. 2) пересчитать под новый выбор и сделать копию ветки с новыми параметрами. 3) начать собирать новую ветку. Какой способ выбрать, решает пользователь. Но как организовывать хранение самой точки? Может есть какие-нибудь источники? |
|||
![]() |
|
||||
Регистрация: 16.08.2006
Санкт-Петербург
Сообщений: 508
![]() |
т.е., по сути, ты хочешь построить дерево принятия решений?
__________________
Алексей |
|||
![]() |
|
||||
студент Регистрация: 03.03.2012
Москва
Сообщений: 50
|
Цитата:
А я кроме как делать обычный файл сохранения не знаю, пока решения. |
|||
![]() |
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,839
|
При такой организации 100% наплодишь ошибок т.к. количество вариатнов проверок корректности очень быстро будет стремится к бесконечности. Формируй список аргументов для построения всей системы "с нуля" - только так.
__________________
Когда в руках молоток все вокруг кажется гвоздями. |
|||
![]() |
|
||||
студент Регистрация: 03.03.2012
Москва
Сообщений: 50
|
Идея очень ценна! Но я так понял, что нужно будет при возврате к точке рассчитывать всё заново от корня до точки. Но в системе присутствуют ресурсоёмкие вычисления. Это будет не очень приятно для пользователя. Хотя идея создания файла с шагами, а потом его выполнение, мне очень понравилась! Можно будет избежать затрат на хранение чертежей и переменных. А не приходилось ли встречаться с описанием таких решений? хотелось бы почитать что-нибудь. |
|||
![]() |
|
||||
Сообщений: n/a
|
Вот сюда попробуй обратиться, там много толковых парней - DEM, SWELL{d}...такие проги им как два пальца...
http://forum.dwg.ru/showthread.php?p...06#post1050506 |
|||
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,839
|
Кэширование, мемоизация, отложенные вычисления... Но с автолиспом будет много костылей и велосипедостроения.
__________________
Когда в руках молоток все вокруг кажется гвоздями. |
|||
![]() |
|
||||
студент Регистрация: 03.03.2012
Москва
Сообщений: 50
|
Цитата:
![]() |
|||
![]() |
|
||||
Регистрация: 20.03.2008
Сообщений: 2,680
|
Можно попробовать реализовать хранение значений (шагов) в свойствах чертежа (тех, которые Файл -> Свойства чертежа...; команда _dwgprops). Записать туда значение, как и прочитать его лиспом не составляет труда. Вопрос в алгоритме.
|
|||
![]() |
|
||||
YngIngKllr Регистрация: 29.03.2005
СПб
Сообщений: 12,968
|
Цитата:
__________________
Работаю за еду. Working for food. Für Essen arbeiten. العمل من أجل الغذاء Працую за їжу. |
|||
![]() |
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372
|
Если бы это была не научно-исследовательская работа, а реальная программа, да не было бы научного руководителя, а была бы цель получить результаты, то всё бы решилось достаточно просто.
Не надо было бы думать про "дерево построения" и прочее. Зато надо было бы думать, а как именно (технически) пользователь "пускай задает сам". В научных работах это опускается. Но упоминается LISP. Это какой - в AutoCAD? Или Lisp "вообще"? Язык программирования, конечно, особого значения не имеет, но зато имеет решающее значение среда разработки. Если делать на AutoLisp, да в AutoCAD, то там никакие "ленты" не помогут. На "лентах" (ribbon, что ли?) можно разместить отдельные кнопки, к каждой из которых привязать LISP-функцию для чего-то (добавить ветвь, удалить и т.д.). Это получится набор самостоятельных "программ", которые должны работать с едиными данными. Отсюда и все возможные беды с сохранением состояния. А тут возможности ограничены: 1. Глобальные переменные во время одного сеанса (что смао по себе плохо) 2. Сохранение внутри файла чертежа (в разных словарях) 3. Сохранение вне чертежа - файл, реестр. Кроме того это дерево вообще визуально не видно (важнейшее для пользователя), да и для его пересчетов нужны какие-то "кнопки". А как такие задачи практически решаются? Если все-таки вернуться к системе вентиляции, то "расчет и отрисовка" делится на две задачи - "расчет" и "отрисовка". Нарисовать реальную схему вентиляционной системы автоматически нереально. Но можно нарисовать "плоскую" расчетную схему в виде дерева, отражающего топологию системы. Такое дерево имеет узлы (точки соединения) и участки воздуховодов (или труб). Смысл всех таких расчетов сводится к вычислению сопротивлений участков и общего сопротивления. При этом подбираются или задаются диаметры воздуховодов. Математические вычисления каждого отдельного участка просты - 2-3 формулы. Расчет системы в целом математически прост (суммирование сопротивлений или проводимостей). Проблема возникает в том, как программа "узнает", что с чем суммировать и как описать это на языке программирования. Ну, это была присказка, теперь сказка. Как это делается практически (как "научно" - представления не имею, мы люди тёмные, гимназиев не кончали): 1. Выбирается подходящая, правильная среда программирования. Такая, в которой есть необходимые компоненты (классы). Возьмем, для примера Delphi. 2. Создается база данных. Формат - по вкусу. Проще всего MDB. В БД создаются необходимые таблицы. Одна из них (основная) - для хранения самого дерева. Типовая схема для дерева - наличие полей для ID участка, ID родителя и имени участка. 3. Для работы с БД - компоненты TAdoDatabase и соответствующее количество TDataSource и TDataSet 4. Для отображения дерева - какой то вариант TDbTreeView. Который умеет и добавлять ветви и редактировать. 5. Для отображения других данных - набор каких нужно Edit. Вот в принципе и всё. Дальше - дело техническое. Все состояния всего постоянно автоматически запоминаются в базе данных. Все пересчеты можно делать автоматически привязкой к событиям BeforePost и AfterPost. А можно и отдельной кнопкой. По данным дерева можно его топологию и нарисовать, хоть в AutoCAD, хоть просто на Canvas. Но всё это - при отсутствии научного руководства. Потому как всё это ненаучно. |
|||
![]() |
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,839
|
Способ конечно рабочий, но зачем здесь "городить" mdb. Я бы сделал рекурсивную структуру с экспортом в XML и настройками отображения - с деревьями работать при помощи реляционных БД - это ИХМО не самый лучший выбор - а "плясать" от имеющегося функционала классов - это тупиковый путь.
__________________
Когда в руках молоток все вокруг кажется гвоздями. |
|||
![]() |
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372
|
Цитата:
А с практической точки зрения любая БД (формат не важен, хоть ХМЛ) имеет массу преимуществ. Если мы имеем любой потомок Dataset, то мы сразу можем использовать множество возможностей. В том числе сразу строить дерево, не написав и строчки кода. Т.е. соредоточиться на основной задаче (например на расчете сети), а не отвлекаться на рутину. Опять же от задачи зависить. Изображать научную деятельность - одно, сделать практически работающую программу - другое. |
|||
![]() |
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,839
|
Это бесспорно, я про то, что структура изначально древовидная, а для нее реляционная БД (mdb) - как у коровы седло - ехать можно, но она (корова) не для этого предназначенна.
__________________
Когда в руках молоток все вокруг кажется гвоздями. |
|||
![]() |
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372
|
Цитата:
|
|||
![]() |
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,839
|
Offtop: Как-то у Вас подозрительно ярко отслеживается ирония в отношении высшего образования. У меня есть два работающих кода делающих одно и то-же - если точнее один - несколько урезанная версия другого, только один (меньший по функционалу - славу богу), в силу физических ограничений сервера именно пришлось писать на "чудесном" PHP. Оба они работают как раз таки с древовидной структурой загруженной в БД (не большой - несколько тысяч записей - автодороги). Так вот этот "меньший" кусочек, как по размеру, так и по трудозатратам на разработку оказался в 20 раз больше, чем больший (административная часть). И все лишь по тому - что последняя сразу загружает всю БД в древовидную структуру и работает с ней (у PHP такой возможности просто нет - да и по скорости без математики СУБД, он-бы просто загнулся - вот и приходилось "извращаться") - если б не "необходимость" использования БД (как единственного "подручного" инструмента PHP дающего необходимую производительность - за счет выполнения вычислений в СУБД) - хрен бы я ее использовал - попробуйте сами, хотя-бы формально, изобразите серию запросов на поиск, например, кратчайшего пути (в задаче, кстати, это было одино из самых простых действий - но и для решения этой ерунды потребовалось создавать временные таблицы в памяти, и городить вокруг них такое, что сам не разберешь как оно работает) - я не знаю может у Вас это и в 1 SQL запрос получится - но сильно сомневаюсь. Я ни каким боком не являюсь "научно-исследовательским" работником, более того - считаю себя как-раз таки "практиком" даже иногда больше чем надо, но однозначно могу сказать - что формат реляционных БД в этих задачах подходит если только для "валовой" загрузки\выгрузки - работать с многовложенными узлами в реляционной БД абсолютное извращение - да занести ее туда просто - основных таблиц всего 2 - графы и "узлы", но работать с ними в этом виде - извращение - и ни из за каких готовых классов быстро и красиво отображающих данные я бы не рекомендовал их к использованию.
з.ы. хотя конечно может быть такой контекст задачи, и 100% понимание что больше от этого дерева ничего не потребуется, который хорошо лег бы на релляционную модель данных - но это частный случай и по крайней мере не про то, про что я сейчас говорю.
__________________
Когда в руках молоток все вокруг кажется гвоздями. |
|||
![]() |
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372
|
Цитата:
Но даже на PHP девовидность прекрасно реализуется. У меня десятка три сайтов, работающих под MODx. MySQL +PHP. В админке сайта его контент отображается деревом. Количество узлов порядка 10000. И никаких тормозов нет. Вот там, в ядре MODx, и потрудились над всем этим. Даже на карту сайта тратится порядка 0.25 сек. А там основное время - прорисовка в браузере. При этом 16 запросов выполняется. Ну и задачи-то разные. ТС спрашивает про примитивную тупиковую схемку, а Вы рассуждаете про сеть дорог и поиск кратчайшего пути. Цитата:
А вот их студенты, кто имеет стремление и голову, прекрасно со всем справляются. И в практических делах гораздо лучше своих преподавателей. Жаль, мало таких выпускников и работы для них настоящей в наших провинциях мало. Уезжают, и правильно делают. |
|||
![]() |
|
||||
студент Регистрация: 03.03.2012
Москва
Сообщений: 50
|
ShaggyDoc:
Программа по расчёту и отрисовке вентиляции была уже реализовано мною год назад на языке AutoLisp. Но я так понял я смогу к примеру на языке Delphi (хотя скорее всего это будет C++) с помощью указаных Вами компонентов, создать программку, которая как раз и будет управлять точками в среде AutoCAD. Научный руководитель есть, но фактически его нет. Ему абсолютно не важно, что я сделать, главное какой-либо результат (вплоть до пояснительной записки с двумя листами: первый титульник, второй библиогрфический список). Но я всё же хотел получить опыт от данной работы. Дима_: Поддерживаю вашу идею о XML. Ведь количество ответвлений так теоретически не ограничено. Тем более что в билдере будь то делфи или С++, есть нормальный набор функций для работы с XML-документами и получение значений. Мне если честно, очень понравилась идея хранить список шагов. А если потом сделать удобную навигацию по дереву с помощью канвы или OpenGL, должно получится довольно прилично. Завтра иду к научнику, посмотрим, что скажет. Благодарю за идеи и помощь! |
|||
![]() |
![]() |
|
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Импорт дерева построения из SolidWorks средствами VBA | Pashok | Программирование | 9 | 29.01.2013 10:00 |
Программа для создания древовидного архива | Солидворкер | Прочее. Программное обеспечение | 18 | 31.01.2012 15:50 |
Книга Хейфеца А.Л. 3D-технология построения чертежа. AutoCAD. 3-е изд. | BM60 | Разное | 22 | 16.02.2009 09:55 |
Автоматизация построения профиля (лисп) | dextron3 | LISP | 24 | 15.10.2008 13:58 |