Хранение информации об узлах и элементов при моделировании методом конечных элементов
Поясню суть вопроса:система моделируется совокупностью точек(узлов),соединённых элементами(примерно так).Надо как-то хранить информацию об узлах и элементах,и вот я не знаю,какой лучше способ использовать
Один из критериев–надо хранить узлы в следующей структуре:координаты узла и список элементов,которые с ним соединены(это потребуется в дальнейшем–так будет удобно составлять таблицу для расчёта)
Линии на форме я динамически создаю с помощью Load LinElt(…)(использую контрол Line).Надо как-то связанно хранить информацию о номере линии и узлах,с ней связанных.Надо учесть также тот факт,что некоторые линии могут быть удалены,соответственно,удалится соответствующий элемент и связанные с ним данные.Никак не могу придумать организацию такой структуры
Пробовал коллекции,но это немного не то,к тому же там какие-то ограничения на пользовательские типы.Подскажите,пожалуйста,как это реализовать,и желательно на языке раздела(VB 6)
При добавлении заполнять на месте удаленных элементов.
Но есть вариант устроить это динамически(см рис). На случай, если добавлений будет много.
В гугле нашла пдф статью "Реализация динамических массивов в Visual Basic", но прикрепить не смогла - большая оказалась.
Цитата: oltzowwa
Думаю удобнее всего будет хранить в двумерном массиве, как в таблице смежности. На пересечении i-го и j-того столбца ставить номер линии, соединяющей i-й и j-й узел. А координаты узла хранить в другом массиве, вместе с его номером. При удалении линии, узла можно в массивах ставить обозначение, что связь отсутствует.
При добавлении заполнять на месте удаленных элементов
При добавлении заполнять на месте удаленных элементов
Насчёт таблиц смежности и прочих структур я профан:),но вот хранить номер элемента на пересечении его узлов–замечательная идея!Такая простая,а я не догадался…:rolleyes:Пожалуй,ей и воспользуюсь,к тому же,между 2мя узлами всегда может быть только 1 элемент
А вот насчёт 2го абзаца я,если честно,не понял…Отчасти из-за того,что картинка нарисована немного кривовато(это не упрёк,просто констатирую;)).Поэтому я был бы рад более чёткому рисунку(если,конечно,у вас найдётся на это время) или даже текстовому объяснению(алгориту).Насчёт PDF с динамическими массивами–если ссылка осталась,то я бы не прочь взглянуть,хотя и знаком с такой темой(вдруг там что-то по моей задаче)
Благодарю за ответ
Реализация динамических массивов в Visual Basic
Минус такой реализации хранения данных, что они дублируются. Как у j-го элемента i-й, так и у i-го в списке смежных будет j-й.
Вместо Zij по схеме можно сделать несколько ячеек для хранения номера, указателя на элемент верхнего списка, номера линии и прочее... тут вы решите как вам удобней.
Плюс такой реализации, что не надо проверять на удаленные узлы. При добавлении в начало списка значение P указателя копируете в поле next нового элемента, P присваиваете адрес нового поля, заполняете остальные поля (координаты, номер узла и создаёте список для хранения смежных узлов.) :confused:НО у смежных надо добавить соответствующее звено в списке, что они связаны с новым!
Интересно, как решите эту проблему.
Прикрепила другой рисунок. Такую схему знаю как сделать на си++, но как в VB была не уверена, что возможно. Но похоже можно.
Минус такой реализации хранения данных, что они дублируются. Как у j-го элемента i-й, так и у i-го в списке смежных будет j-й.
Вместо Zij по схеме можно сделать несколько ячеек для хранения номера, указателя на элемент верхнего списка, номера линии и прочее... тут вы решите как вам удобней.
Плюс такой реализации, что не надо проверять на удаленные узлы. При добавлении в начало списка значение P указателя копируете в поле next нового элемента, P присваиваете адрес нового поля, заполняете остальные поля (координаты, номер узла и создаёте список для хранения смежных узлов.) :confused:НО у смежных надо добавить соответствующее звено в списке, что они связаны с новым!
Интересно, как решите эту проблему.
За ссылку спасибо,интересный документ.Не знал о такой возможности(сам использовал немного другое–динамические массивы,поэтому думал,что в том PDF будет то же самое)
Upd:мне неудобно просить девушку,но если не трудно,будь добра,реализуй на C++.Для уточнения выпишу идею
У меня для программы графический интерфейс,поэтому дело происходит следующим образом:в графическом поле(см. ссылку) пользователь щелчком создаёт элементы–сначала 1й узел(и за курсором тянется линия),а затем 2й.Во время создания элемента можно отменить это дело правой кнопкой.Вот мне надо как-то реализовать это дело
Пока попробую своим методом
Кстати,вот и скриншот с программой.Прямые ссылки на исполнимые файлы вроде не разрешены,поэтому дам косвенную на архив (=
На с++ по вашей просьбе написала функции добавления элемента, удаления и поиска. Жду комментариев и замечаний по коду.
Итак,по коду–я не знаток C++,ну и с переводом на VB тоже возникли бы неиллюзорные проблемы.Т.к. для начала программа должна быть проста по структуре,я принял следующее:
• узлы хранятся в динамическом массиве,который увеличивается на 1 элемент при добавлении нового узла.Элемент массива–это пара координат на плоскости(т.е. x,y);
• элементы хранятся в аналогичном массиве,только элементом массива является структура,состоящая из начального и конечного узла(и площади сечения,ну это не так важно)
Вот и всё.Т.е.,имея индекс элемента,можно узнать его координаты,а такая организация хранения данных об элементах даёт удобство при построении матрицы
Тем не менее,спасибо всем отписавшимся за конструктивные(и не очень:)) советы;возможно,они мне пригодятся в будущем при совершенствовании программы