Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Хранение информации об узлах и элементов при моделировании методом конечных элементов

7
19 марта 2010 года
@pixo $oft
3.4K / / 20.09.2006
Взялся за создание такой программы по расчёту стержневых систем(1е реальная возможность совместить программирование и учёбу:)).Сначала хотел сам,но потом уж впрягли,т.е. делать придётся точно (=

Поясню суть вопроса:система моделируется совокупностью точек(узлов),соединённых элементами(примерно так).Надо как-то хранить информацию об узлах и элементах,и вот я не знаю,какой лучше способ использовать

Один из критериев–надо хранить узлы в следующей структуре:координаты узла и список элементов,которые с ним соединены(это потребуется в дальнейшем–так будет удобно составлять таблицу для расчёта)

Линии на форме я динамически создаю с помощью Load LinElt(…)(использую контрол Line).Надо как-то связанно хранить информацию о номере линии и узлах,с ней связанных.Надо учесть также тот факт,что некоторые линии могут быть удалены,соответственно,удалится соответствующий элемент и связанные с ним данные.Никак не могу придумать организацию такой структуры

Пробовал коллекции,но это немного не то,к тому же там какие-то ограничения на пользовательские типы.Подскажите,пожалуйста,как это реализовать,и желательно на языке раздела(VB 6)
9.7K
22 марта 2010 года
oltzowwa
105 / / 15.02.2007
Думаю удобнее всего будет хранить в двумерном массиве, как в таблице смежности. На пересечении i-го и j-того столбца ставить номер линии, соединяющей i-й и j-й узел. А координаты узла хранить в другом массиве, вместе с его номером. При удалении линии, узла можно в массивах ставить обозначение, что связь отсутствует.
При добавлении заполнять на месте удаленных элементов.

Но есть вариант устроить это динамически(см рис). На случай, если добавлений будет много.
В гугле нашла пдф статью "Реализация динамических массивов в Visual Basic", но прикрепить не смогла - большая оказалась.
7
22 марта 2010 года
@pixo $oft
3.4K / / 20.09.2006
Цитата: oltzowwa
Думаю удобнее всего будет хранить в двумерном массиве, как в таблице смежности. На пересечении i-го и j-того столбца ставить номер линии, соединяющей i-й и j-й узел. А координаты узла хранить в другом массиве, вместе с его номером. При удалении линии, узла можно в массивах ставить обозначение, что связь отсутствует.
При добавлении заполнять на месте удаленных элементов

Насчёт таблиц смежности и прочих структур я профан:),но вот хранить номер элемента на пересечении его узлов–замечательная идея!Такая простая,а я не догадался…:rolleyes:Пожалуй,ей и воспользуюсь,к тому же,между 2мя узлами всегда может быть только 1 элемент

А вот насчёт 2го абзаца я,если честно,не понял…Отчасти из-за того,что картинка нарисована немного кривовато(это не упрёк,просто констатирую;)).Поэтому я был бы рад более чёткому рисунку(если,конечно,у вас найдётся на это время) или даже текстовому объяснению(алгориту).Насчёт PDF с динамическими массивами–если ссылка осталась,то я бы не прочь взглянуть,хотя и знаком с такой темой(вдруг там что-то по моей задаче)

Благодарю за ответ

9.7K
22 марта 2010 года
oltzowwa
105 / / 15.02.2007
Прикрепила другой рисунок. Такую схему знаю как сделать на си++, но как в VB была не уверена, что возможно. Но похоже можно. Реализация динамических массивов в Visual Basic

Минус такой реализации хранения данных, что они дублируются. Как у j-го элемента i-й, так и у i-го в списке смежных будет j-й.

Вместо Zij по схеме можно сделать несколько ячеек для хранения номера, указателя на элемент верхнего списка, номера линии и прочее... тут вы решите как вам удобней.

Плюс такой реализации, что не надо проверять на удаленные узлы. При добавлении в начало списка значение P указателя копируете в поле next нового элемента, P присваиваете адрес нового поля, заполняете остальные поля (координаты, номер узла и создаёте список для хранения смежных узлов.) :confused:НО у смежных надо добавить соответствующее звено в списке, что они связаны с новым!

Интересно, как решите эту проблему.
7
22 марта 2010 года
@pixo $oft
3.4K / / 20.09.2006
Спасибо ещё раз,уважаемая.Пожалуй,ваша схемка сложновата будет,да и неудобна немного…Я буду всё же хранить информацию об узлах(тут надо будет ещё задуматься над удалением элементов и узлов,если с ними не связан ни один элемент).Но я подумаю и над вашей:)

За ссылку спасибо,интересный документ.Не знал о такой возможности(сам использовал немного другое–динамические массивы,поэтому думал,что в том PDF будет то же самое)

Upd:мне неудобно просить девушку,но если не трудно,будь добра,реализуй на C++.Для уточнения выпишу идею
У меня для программы графический интерфейс,поэтому дело происходит следующим образом:в графическом поле(см. ссылку) пользователь щелчком создаёт элементы–сначала 1й узел(и за курсором тянется линия),а затем 2й.Во время создания элемента можно отменить это дело правой кнопкой.Вот мне надо как-то реализовать это дело
Пока попробую своим методом

Кстати,вот и скриншот с программой.Прямые ссылки на исполнимые файлы вроде не разрешены,поэтому дам косвенную на архив (=
9.7K
23 марта 2010 года
oltzowwa
105 / / 15.02.2007
На с++ по вашей просьбе написала функции добавления элемента, удаления и поиска. Жду комментариев и замечаний по коду.
7
06 апреля 2010 года
@pixo $oft
3.4K / / 20.09.2006
Наконец-то вспомнил,что тут надо отписаться:)

Итак,по коду–я не знаток C++,ну и с переводом на VB тоже возникли бы неиллюзорные проблемы.Т.к. для начала программа должна быть проста по структуре,я принял следующее:
• узлы хранятся в динамическом массиве,который увеличивается на 1 элемент при добавлении нового узла.Элемент массива–это пара координат на плоскости(т.е. x,y);
• элементы хранятся в аналогичном массиве,только элементом массива является структура,состоящая из начального и конечного узла(и площади сечения,ну это не так важно)
Вот и всё.Т.е.,имея индекс элемента,можно узнать его координаты,а такая организация хранения данных об элементах даёт удобство при построении матрицы

Тем не менее,спасибо всем отписавшимся за конструктивные(и не очень:)) советы;возможно,они мне пригодятся в будущем при совершенствовании программы
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог