|
||
| Правила | Регистрация | Пользователи | Поиск | Сообщения за день | Все разделы прочитаны | Справка по форуму | Файлообменник | |
|
Поиск в этой теме |
|
||||
Это, как минимум, формирует наборы данных в удобной вам форме для их дальнейшей обработки в коде вашего алгоритма.
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome: |
||||
|
||||
Конкретная задача - это же и будет абстрактно.
Чем не задачи, которые я привел в первом сообщении и в "т.п."? Мы сейчас пишем почти одновременно примерно семь подобных программ, и во всех делается фактически одно - многократный перебор всех элементов с установлением их взаимного положения, отношений и связей. И такого же рода программ придется писать еще несколько и в ближайшее время, и, похоже, позже. Цитата:
Вероятно, просмотр всех элементов неизбежен, и в этом Ваше решение может быть очень полезным. Но это только подход к задаче. Как бы в процессе этого просмотра элементов создать такое описание их положения и формы, чтобы при последующем анализе просматривать уже не все, а в основном потенциально необходимые элементы? |
||||
|
||||
Цитата:
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome: |
||||
|
||||
КИПиА Регистрация: 21.03.2005
Tyumen
Сообщений: 1,352
|
>>Как непосвещенный, я предполагаю, что в dwg-файле элементы хранятся в целом просто в порядке их поступления,т.е. их взаимные связи (соединение, наложение, пересечение и т.п.) никак не описаны, и их взаимное положение никак не структурировано, не описано. Это правильно?
Нет, не правильно. При обработке примитивов автокад вовсю использует пространственное разбиение >>для файлов примерно какого размера (+-полмегабайта) или какого числа элементов (+-1000), или числа вершин элементов (+-1000) подобные ухищрения имеют смысл на не очень мощных и на хороших компьютерах? Эмпирически-экспертно, конечно. Всякого рода "ухищрения" имеют смысл всегда, иначе программа будет тормозить на любом компьютере |
|||
|
||||
Цитата:
Можно узнать какое, в чем оно выражается? И как им лучше воспользоваться? |
||||
|
||||
Похоже мы на разных языках разговариваем... Обозначенный мною выше код позволяет манипулировать данными, имеющими свой ObjectId, создавая наборы элементов, подлежащих обработке и, при необходимости, модифицируя их. Код писался не для некой "геометрическую оптимизации", а для более общих задач. Я не знаю как ещё объяснять - вроде там всё должно быть понятно из кода, т.к. постарался там разжевать всё как можно подробней, насколько это возможно.
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome: |
||||
|
||||
КИПиА Регистрация: 21.03.2005
Tyumen
Сообщений: 1,352
|
>>Можно узнать какое, в чем оно выражается?
Выражается в скорости работы, недостижимой при подходе "я предполагаю, что в dwg-файле элементы хранятся в целом просто в порядке их поступления,т.е.". Т.е. в dwg файле они так и хранятся (хотя там присутствуют некие SPATIAL_FILTER, SPATIAL_INDEX - не вникал что они в себе несут), но обрабатывается всё это хозяйство явно не "всё по очереди" >>И как им лучше воспользоваться? Это вопрос к местным корифеям, какие свои механизмы автокад предоставляет наружу. В порядке ознакомления что это и зачем лучше заглянуть в википедию и почиать про http://en.wikipedia.org/wiki/K-d_tree и подобные алгоритмы |
|||
|
||||
Цитата:
Цитата:
|
||||
|
||||
КИПиА Регистрация: 21.03.2005
Tyumen
Сообщений: 1,352
|
>>Т.е. сама фирма некую оптимизацию использует, но какую - неизвестно? И Вы считаете, что в самих dwg файлах есть что-то вроде индексации или т.п., но что именно - тоже неизвестно?
Неизвестно мне и вам. Я же говорю, пусть знатоки выскажутся - что на эту тему можно выудить из arx - вполне возможно что ничего, но это не значит что не использует. Говоря про dwg файл я подразумеваю файл лежащий на диске, а не dwg открытый автокадом. |
|||
|
||||
Цитата:
Расколюсь. В пятницу, 13-го, в конце рабочего дня породил некий алгоритмище оптимизации (ну, сами понимаете, что может придумать 13-го в пятницу вечером не программист ). Стеснялся об этом здесь поминать. Но попробую приложить - для некоего примера того, что я имею в виду. Последний раз редактировалось АлексЮстасу, 16.09.2013 в 04:35. |
||||
|
||||
Цитата:
Почему именно этот метод? Чем этот метод лучше других? Вы полагаете, что этот метод не только лучший, но еще и хорошо реализуется программно? Вам известны примеры его применения в каких-то программах под Автокад? Кстати, в #27 zamtmn привел в пример именно K-d_tree. Последний раз редактировалось АлексЮстасу, 16.09.2013 в 04:39. |
||||
|
||||
КИПиА Регистрация: 21.03.2005
Tyumen
Сообщений: 1,352
|
trir
Придумывать, а потом читать книжки реально интересней)) АлексЮстасу Добавте в алгоритм пару пунктов: -Лучше ввести древовидную структуру данных, т.к. 1)еще больший профит за счет отбраковки всех дочерних "подпространств" путем отбраковки вышестоящего, 2) реальные а не подготовленные данные наврятли можно вписать в какую либо "сетку" - всегда будут примитивы которые будут всё портить - пересекать границы в которые хорошо вписываются другие примитивы, 3) удобно "ограничить" процесс построения такого дерева количеством примитивов в "листах" и глубиной вложенности -В случае наличия в данных "длинных" примитивов - например полилиний с большим кол-вом сегментов ваш алгоритм стоит применять и внутри примитивов (т.е. грубо говоря считать полилинию набором отрезков и дуг) update: Цитата:
update2: когда я вникал в потроха LibreCAD он был еще 1.0, сейчас уже 2.0rc, такчто возможно он уже поумнел и не "в лоб" Последний раз редактировалось zamtmn, 16.09.2013 в 08:18. |
|||
|
||||
КИПиА Регистрация: 21.03.2005
Tyumen
Сообщений: 1,352
|
Если автокад не предоставляет подобных "интерфейсов" то дерево садить придется только перед проведением массивных геометрических вычислений, после рубить на дрова. Хотя уверенн что все элементарные операции (типа поиска пересечений или примитивов в окресности) в автокаде подобным образом и устроены и только ради них такое городить нестоит
Последний раз редактировалось zamtmn, 16.09.2013 в 08:19. |
|||
|
||||
Цитата:
Т.е. этот алгоритм следует понимать не совсем буквально, а как некий эскиз для предложений. Алгоритм предназначен для работы самой программы, его описание данных живет только в процессе выполнения программ - и никак не влияет на сами данные, на их структурирование в файле. Поэтому и изменение данных ("приклеивание листьев", веток и пр. к чертежу) не влияет на него. Цитата:
Габарит сетки >= габариту файла. Цитата:
И да, мне уже говорят, что в Автокаде все устроено через такие гланды, что проще прямо перебирать элементы, чем еще и грузить его (и себя) оптимизацией. |
||||
|
||||
КИПиА Регистрация: 21.03.2005
Tyumen
Сообщений: 1,352
|
>>Поясните, плз, пункт 2).
Для примера файл из 10 полилиний по 10000 сегментов в каждой. Построение дерева на уровне примитивов в таком случае эффекта иметь не будет. Если же для каждой полилинии выполнить разбиение (отдельно или в общей структуре данных) эффект появится - т.к. перебор 10000 сегментов заменится двоичным поиском. >>Все потому же - не могу оценить трудоемкость (вредоносность/эффективность). на коленке написаный алгоритм разбиения на паскале занял ~500 строк. эффект получился значительный - в программе-тормозилке стало возможно вполне комфортно работать. Но были большие сложности подружить его с уже работающими фрагментами. построение дерева для 21000 примитивов, 500 примитивов в ноде, максимальная глубина берева 16: Цитата:
Цитата:
|
|||
|
||||
|
||||
|
||||
Node (узел). Уже сто раз можно было в интернете самостоятельно найти и прочитать информацию по теме построения деревьев...
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome: |
||||
|
||||
КИПиА Регистрация: 21.03.2005
Tyumen
Сообщений: 1,352
|
Я не програмист поэтому извиняюсь если путаю термины. Также это всё хозяйство было написано без оглядки на толковые книжки - я их читал когдато давно в детстве.
Нода в моей реализации - ограничивающий объем+плоскость делящая ноду+ссылка на ноду "левее" плоскости+ссылка на ноду "правее" плоскости+список примитивов которые пересекаются плоскостью 1.На вход приходит срисок примитивов+уже посчитаный ограничивающий объем всех примитивов 2.создаем ноду 3.если (примитивов<примитивов в ноде)или(глубина дерева>максимальная глубина берева) то пишем все примитивы в список пересекающихся плоскостью, выходим возвращая созданную ноду 3.выбираем плоскость разбиения (тут я прибумывал всякие хитрые способы, но просто разбивать пополам перпендикулярно самой длинной оси ничють не хуже всяких хитростей) 4.список примитивов делим на 3 списка 1-левее плоскости, 2-правее плоскости, 3-пересекаются плоскостью 5. пишем список 3 в список пересекающихся плоскостью 6. ссылка на ноду "левее" плоскости=рекурсивный вызов п.1 со списком 1 и его ограничивающим объемом 7. ссылка на ноду "правее" плоскости=рекурсивный вызов п.1 со списком 2 и его ограничивающим объемом на выходе получается рекурсивное дерево ограничивающих объемов с перечнем примитивов в него попавших. разбиение продолжается пока не будет достигнута максимальная глубина или количество примитивов в ноде не будет меньше заданного Цитата:
ps. На оптимальность алгоритма я не претендую Последний раз редактировалось zamtmn, 16.09.2013 в 21:25. |
|||
|
Опции темы | Поиск в этой теме |
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Документация Проектировщику на Torrents | DEM | Разное | 262 | 24.02.2024 17:19 |
Жилые и общественные здания: краткий справочник инженера-конструктора. Под ред. Ю.А. Дыховичного и В.И. Колчунова. 2011 (Впечатления и отзывы). | Armin | Поиск литературы, чертежей, моделей и прочих материалов | 19 | 22.03.2018 15:41 |
Порекомендуйте литературу для повышения квалификации(грунты, геотехника) | acid | Поиск литературы, чертежей, моделей и прочих материалов | 6 | 13.05.2015 22:14 |
Случайный эксцентриситет | p_sh | Прочее. Архитектура и строительство | 14 | 22.07.2009 11:32 |
Защита от распространения большого числа dwg | E.D. | AutoCAD | 24 | 21.11.2008 09:02 |