Разработка и реализация программного модуля для трехмерной и двухмерной визуализации геометрических сборок для ПК BRAND
Геометрический модуль ПК BRAND. Основы метода Монте-Карло для решения уравнения переноса. Порядок построения траектории, модуль визуализации. Апробация на разных сборках, пользовательский интерфейс. Тестирование двухмерного и трехмерного режимов.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | дипломная работа |
Язык | русский |
Дата добавления | 22.11.2015 |
Размер файла | 1,9 M |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Далее, пользуясь возможностями библиотеки OpenGL, выводятся на экран все элементы сборки «по кирпичикам» для трехмерного режима и, пользуясь возможностями библиотеки Draw, выводятся на экран все элементы сборки отрезками для двухмерного режима.
3.1 Пользовательский интерфейс
Программа SUPER BRAND имеет простой интерфейс, состоящий из нескольких окон
Первое окно представляет собой картинку одной из сборок, с которой работает программный комплекс BRAND, а также кнопкой «Продолжить», которая переводит нас на главное окно, состоящее из панели вкладок и панели икон.
Вкладка «Файл» позволяет открыть файл с геометрическим заданием сборки, с помощью диалогового режима (см. приложение 2), а также выйти из программы. Иконы на панели открывают файл с геометрией, и осуществляет выход из программы.
После открытия файла появляется окно с изображением сборки.
В окне представлены панели вкладок и основных инструментов. Вкладка «Данные» позволяет перейти на апплет «Значения параметров», который позволяет механически задать ось сечения, значение по оси, а также области прорисовки
Вкладка «Материалы» вызывает апплет «Таблица зон», который позволяет пользователю самостоятельно задать цвета для различных материалов
Вкладка «3D графика» открывает окно с реализованной 3D отрисовкой, о которой будет рассказано ниже. Иконы на панели выполняют функции вкладок: «Данные», «Таблица зон», строя проекции перпендикулярно выбранной оси, увеличивают или уменьшают полученное изображение, задают точку для построения проекции. В правом нижнем углу представляется информация о координатах точки.
3.2 Практическая часть. Двухмерный режим
После открытия файла появляется окно с изображением сборки. Для того чтобы изображения было отрисовано необходимо узнать его положение. Для этого запускаются перпендикулярные друг другу лучи с шагом равным 1 пиксель, для нахождение минимальных и максимальных значений фигуры по осям OX, OY и OZ.
void vlet(ref double X, ref double Y, ref double Z, ref double U, ref double V, ref double W,ref int ISTOP, ref int KGEOM, ref double AT)-функция, позволяющая выводить луч, где:
ref double X, ref double Y, ref double Z- передача координат по ссылке, из которых выпускается луч;
ref double U, ref double V, ref double W-передача направления выпускаемого луча;
ref int ISTOP-остановочный элемент, передает значение «0» если на пути луча не был встречен элемент сборки, «1»-был найден элемент сборки;
ref int KGEOM-передает количество зон, встреченных на пути;
ref double AT - содержит расстояние до первой зоны.
Далее осуществляется первая прорисовка в плоскости YOZ
Тестирование двухмерного режима
В режиме тестирования были проверены различные функции программы.
1. Проекция параллельно оси OY. Были выбраны точки Y=2,941 Z=-8,824
2. Проекция параллельно оси OZ. Были выбраны точки X=-170,588 Y=-2,941
3. Масштабирование: уменьшение и увеличение (см приложение 4)
4. Задание данных. Выбрали ось сечения-OY, значение по оси=-2,941.
5. Таблица материалов. Был выбран материал под номером 2, сменили цвет с оранжевого на синий.
6. Прокрутка. Изображение было сдвинуто вправо и вниз
3.3 Практическая часть. Трехмерный режим
Модификация созданных функций для взаимодействия с программным комплексом BRAND.
Для обеспечения связи с BRAND было создано две библиотеки void vlet и void geom. Это внешние функции, загружаемые из разработанной динамической библиотеки. Они были адоптированны для трехмерной визуализации. Для этого был создан публичный класс.
public static void Vlet ( ref Luch luch, ref int ISTOP, ref int KGEOM, ref double AT)
{
double X = luch.position.x;
double Y = luch.position.y;
double Z = luch.position.z;
double U = luch.direction.x;
double V = luch.direction.y;
double W = luch.direction.z;
vlet(ref X, ref Y, ref Z, ref U, ref V, ref W, ref ISTOP, ref KGEOM, ref AT);
luch = new Luch(new Point3D(X,Y,Z), new Point3D(U,V,W));
}
public static void Geom(ref int KGEOM,ref Luch luch, ref int KMAX, int[] MS, double[] AMR)
{
double X = luch.position.x;
double Y = luch.position.y;
double Z = luch.position.z;
double U = luch.direction.x;
double V = luch.direction.y;
double W = luch.direction.z;
WorkWithDll.geom(ref KGEOM, ref X, ref Y, ref Z, ref U, ref V, ref W, ref KMAX, MS, AMR);
luch = new Luch(new Point3D(X, Y, Z), new Point3D(U, V, W));
}
ref int KGEOM- передает количество зон, встреченных на пути;
Luch luch - структура, содержащая информацию о координатах и направлении точки
ref int ISTOP-остановочный элемент, передает значение «0» если на пути луча не был встречен элемент сборки, «1»-был найден элемент сборки;
ref double AT - содержит расстояние до первой зоны.
ref int KMAX-передает общую длину всех зон;
int[] MS-массив, встреченных зон;
double[] AMR-массив длин всех зон;
Класс, отвечающий за трехмерную прорисовку.
Чтобы сборка была нарисована, сначала определяются ее границы, далее формируется массив длин материалов на каждый луч. Выпускаемый нейтронный луч, как говорилось ранее, представляет собой параллелепипед, разделенный на различный зоны. Была выбрана плоскость XOZ, из которой выпускаются лучи с шагом 60. Таким образом, объект представляет собой набор параллелепипедов. Конечный результат - трехмерное изображение сборки на экране компьютера(см. приложение 8). Данная сборка является грубым изображением из-за крупного разбиения плоскости. Шаг построения фигуры можно задавать вручную в приложении, тем самым увеличивая или уменьшая точность отрисовки.
3.3.1 Тестирование трехмерного режима
1. Изменение шага разбиения для прорисовки сборки.
2. Масштабирование изображения (см.приложение 4)
3. Динамическое взаимодействие с фигурой: повороты вдоль осей OX,OY, OZ, смещение вдоль OX, OY.
4. Взаимодействие с нарисованными зонами и материалами: прорисовка указанных зон или материалов. Просмотр информации по материалу. Т.к. заказчиком не была представлена общее обозначение материалов, их название и свойство. Было принято решение обозначать условно: “Material” + №
3.4 Тестирование на реальных сборках
Вычислительный эксперимент
Объектом исследования выступал пенал для хранения отработавшего ядерного топлива. Сборка его осуществлялась по конструкторским чертежам и была реализована на языке описания геометрии в ПК BRAND. Проверка корректности построения проводилась с помощью модулей двумерной и трехмерной визуализации, представляемых в данной работе.
Задача хранения отработавшего ядерного топлива (ОЯТ) считается одним из наиболее актуальных вопросов современной атомной энергетики. Надежность хранилищ являются залогом безопасного будущего страны.
Хранилище отработавшего ядерного топлива (ХОЯТ) - это комплекс зданий и сооружений с бассейнами, имеющими автономные системы спецвентиляции, водоочистки и охлаждения. Комплекс расположен в охраняемом периметре промышленной площадки АЭС. В приёмном отделении хранилища ОТВС поштучно извлекаются из транспортного чехла, помещаются в пеналы, заполненные водой, и поступают на длительное хранение в заполненные водой отсеки хранилища. Бассейны хранилища представляют собой прямоугольные железобетонные емкости, выполненные из гидротехнического бетона и облицованные нержавеющей сталью. Для повышения безопасности ХОЯТ под его
Рис. 5. Изображение ХОЯТа
фундаментной плитой расположен железобетонный «поддон» для улавливания протечек. Над водяным бассейном установлено щелевое балочное перекрытие (2 на Рис. 5), и пеналы (3 на Рис. 5) с отработавшим ядерным топливом (ОЯТ), размещенных непосредственно на балках посредством фланцев.
Для пенала при «мокром» хранении необходимо было определить значения параметров его эксплуатации, при которых создается опасность прохождения излучения во внешнюю среду. Исследовались следующие характеристики: уровень воды в пенале Hp, уровень воды в бассейне Hb, плотность воды в пенале с.
Результаты расчетов для гамма излучения приведены в таблице 2. Тип рассматриваемой ситуации обозначается в форме: уровень воды в пенале (от нормального) (Np-Hp), см / уровень воды в бассейне (от нормального) (Nb-Pb), см /плотность воды в пенале с, % (относительно 1)
Таблица 2. Мощности дозы гамма-излучения (нрад/с)
Положение расчетной точки относительно уровня пола, см |
0/0/100 |
0/0/90 |
0/-50/100 |
0/-50/90 |
|||||
M |
D |
M |
D |
M |
D |
M |
D |
||
-125 |
5540.9 |
0.3 |
5735.5 |
0.4 |
5571.2 |
0.4 |
5758.7 |
0.3 |
|
-95 |
336.5 |
1.1 |
390.8 |
1.3 |
624.8 |
1.4 |
715.2 |
0.8 |
|
-70 |
46.4 |
1.0 |
58.7 |
1.0 |
155.8 |
1.9 |
195.2 |
1.5 |
|
0 |
9.4 |
0.8 |
11.9 |
0.9 |
31.5 |
1.0 |
38.6 |
0.5 |
|
Положение расчетной точки относительно уровня пола, см |
-50/-50/100 |
-50/-50/90 |
-50/0/100 |
-50/0/90 |
|||||
M |
D |
M |
D |
M |
D |
M |
D |
||
-125 |
5618.5 |
0.1 |
5841.6 |
0.2 |
5594.3 |
0.3 |
5786.1 |
0.3 |
|
-95 |
1660.6 |
0.4 |
1740.1 |
0.2 |
943.1 |
1.3 |
979.4 |
0.5 |
|
-70 |
950.2 |
0.3 |
1002.2 |
0.2 |
339.6 |
1.8 |
351.2 |
0.7 |
|
0 |
173.7 |
0.2 |
183.3 |
0.2 |
69.4 |
0.6 |
73.0 |
0.5 |
Далее рассчитывалось распределение мощности дозы на уровне пола и на уровне верхней точки топливного столба в пределах элементарной ячейки для ситуации с наихудшим показателем в табл. 2., то есть когда уровень воды и в пенале и в бассейне снижен на 0,5 м от нормального уровня, плотность воды 0,9 г/см3..
Рис 6. Распределение мощности дозы гамма-излучения на уровне пола в пределах элементарной ячейки для ситуации -50/-50/90, как самой напряженной.
Рис 7. Распределение мощности дозы гамма-излучения на уровне верхней точки топливного столба в пределах элементарной ячейки для ситуации -50/-50/90, как самой напряженной.
Рис 8. Распределение мощности дозы гамма-излучения на уровне нижней точки топливного столба в пределах элементарной ячейки для ситуации -50/-50/90, как самой напряженной.
Полученные результаты с геометрического модуля.
Рис. Двухмерный режим
Рис. Трехмерный режим
Выводы
В результате проделанной дипломной работы мною был создан программный модуль для двумерной и трехмерной визуализации сборок ПК BRAND, который был протестирован на данных, предоставленных расчетной группой. На данный момент работа имеет практическую значимость, т.к. обеспечивает контроль за качеством сборки конструкций. В частности, создана библиотека функций физмодуля ПК BRAND, соответствующих этапам моделирования траектории частицы, пролетающей через материал. А также разработан и реализован алгоритм для двумерной и трехмерной визуализаций сборок.
Так же были изучены: основы метода Монте-Карло и его применение для решения задач переноса излучения, библиотеки доступа к графическому интерфейсу OpenGL;
Литература
1. http://ru.wikipedia.org (свободная общедоступная мультиязычная универсальная интернет-энциклопедия)
2. П.А. Андросенко, В.И. Белоусов, А.В. Коньков, А.Г. Царина. Современный статус комплекса программ BRAND// Вопросы атомной наук и и техники. Серия: Физика ядерных реакторов, 2011, вып. 1, с. 74-84
3. .Андросенко А.А., Андросенко П.А. Комплекс программ BRAND для расчетов характеристик переноса излучения методом Монте-Карло. Вопросы атомной науки и техники. Сер. Физика и техника ядерных реакторов, 1985, вып. 7, с. 33.
4. Андросенко А.А., Андросенко П.А., Болонкина Г.В., Дубровина С.И., Кривцов А.С., Пупко С.В. Интегрированный константный модуль комплекса программ BRAND. Препринт ФЭИ-2565, Обнинск, 2012.
5. П.А. Андросенко, Г.В. Попова. Эффективный метод моделирования распределения Клейна-Нишины-Тамма// Журнал вычислительной математики и математической физики. 1981. Вып.4, c.1056-1061.
6. Михайлов Г.А., Войтишек А.В. Численное статистическое моделирование: Методы Монте-Карло: учеб. Пособие. - Академия, Новосибирск, 2009
7. http://www.laes.ru/content/actual/2011/22_11_11_2.htm
8. http://www.esate.ru/ (мультимедиа сообщество)
9. http://www.codenet.ru (сайт для программистов)
Приложение
1. Пример задания исходных данных геометрии
&COMG MHIST=20000,MPACH=2,IRUSS=1,I120=0,
WESN=1.E+6,EMS=.01,SNORM=119.76095187e+12,
RESTRT=.F.,MPRINT=1,VARNAM='1_co60' /
&ISTG XIS=91.6,RIS=0. /
&ISTA IU0=2 /
&ISTE IE0=8,NTE=2,
ZN=1.332,1.173,
PROB=99.98,99.87 /
&GENAME GEONAM='UN94' /
&GEO NPOV=71,NZON=75 /
&GEOP NP1=1,POVNAM='CIL' /
&GEOCIL Y0=0.,Z0=0.,R=16.5 /
&GEOP NP1=2,POVNAM='CIL' /
&GEOCIL Y0=0.,Z0=0.,R=19.9 /
&GEOP NP1=3,POVNAM='CIL' /
&GEOCIL Y0=0.,Z0=0.,R=22. /
&GEOP NP1=4,POVNAM='CIL' /
&GEOCIL Y0=0.,Z0=0.,R=48.9 /
&GEOP NP1=5,POVNAM='CIL' /
&GEOCIL Y0=0.,Z0=0.,R=57.1 /
&GEOP NP1=6,POVNAM='CIL' /
&GEOCIL Y0=0.,Z0=0.,R=72.5 /
&GEOP NP1=7,POVNAM='CIL' /
&GEOCIL Y0=0.,Z0=0.,R=86.5 /
&GEOP NP1=8,POVNAM='CIL' /
&GEOCIL Y0=0.,Z0=0.,R=500. /
&GEOP NP1=9,POVNAM='PLAN' /
&GEOPLN X=-800. /
&GEOP NP1=10,POVNAM='PLAN' /
&GEOPLN X=0.001 /
&GEOP NP1=11,POVNAM='PLAN' /
&GEOPLN X=43.4 /
&GEOP NP1=12,POVNAM='PLAN' /
&GEOPLN X=51.9 /
&GEOP NP1=13,POVNAM='PLAN' /
&GEOPLN X=205.3 /
&GEOP NP1=14,POVNAM='PLAN' /
&GEOPLN X=218.5 /
&GEOP NP1=15,POVNAM='PLAN' /
&GEOPLN X=271.5 /
&GEOP NP1=16,POVNAM='PLAN' /
&GEOPLN X=309.6 /
&GEOP NP1=17,POVNAM='PLAN' /
&GEOPLN X=330.6 /
&GEOP NP1=18,POVNAM='PLAN' /
&GEOPLN X=700. /
&GEOP NP1=19,POVNAM='CIL' /
&GEOCIL Y0=0.,Z0=0.,R=23.7 /
&GEOP NP1=20,POVNAM='POV2' /
&GEOPV2 AXX=0.172303310786757,
AYY=-1.,
AZZ=-1.,
AX = -115.892773228907,
A = 19487.6332111072 /
&GEOP NP1=21,POVNAM='POV2' /
&GEOPV2 AXX=7.054236330694872E-003,
AYY=-1.,
AZZ=-1.,
AX = -8.34908549817099,
A = 2470.4008078616 /
* 9 sfer v peregruzo4nom bloke
&GEOP NP1=22,POVNAM='SFER' &END
&GEOSFR X0=99.8,Y0=0.,Z0=8.,R=7.5 /
&GEOP NP1=23,POVNAM='SFER' &END
&GEOSFR X0=99.8,Y0=0.,Z0=-8.,R=7.5 /
&GEOP NP1=24,POVNAM='SFER' &END
&GEOSFR X0=115.,Y0=8.,Z0=0.,R=7.5 /
&GEOP NP1=25,POVNAM='SFER' &END
&GEOSFR X0=115.,Y0=-8.,Z0=0.,R=7.5 /
&GEOP NP1=26,POVNAM='SFER' &END
&GEOSFR X0=130.2,Y0=0.,Z0=8.,R=7.5 /
&GEOP NP1=27,POVNAM='SFER' &END
&GEOSFR X0=130.2,Y0=0.,Z0=-8.,R=7.5 /
&GEOP NP1=28,POVNAM='SFER' &END
&GEOSFR X0=145.4,Y0=8.,Z0=0.,R=7.5 /
&GEOP NP1=29,POVNAM='SFER' &END
&GEOSFR X0=145.4,Y0=-8.,Z0=0.,R=7.5 /
&GEOP NP1=30,POVNAM='SFER' &END
&GEOSFR X0=160.6,Y0=0.,Z0=0.,R=7.5 /
* Kontejner v peregruzo4nom bloke ( number 14 )
&GEOP NP1=31,POVNAM='CIL' /
&GEOCIL Y0=0.,Z0=0.,R=16. /
&GEOP NP1=32,POVNAM='PLAN' /
&GEOPLN X=91.6 /
&GEOP NP1=33,POVNAM='PLAN' /
&GEOPLN X=92.1 /
&GEOP NP1=34,POVNAM='PLAN' /
&GEOPLN X=168.6 /
&GEOP NP1=35,POVNAM='PLAN' /
&GEOPLN X=169.1 /
* Steel 10-mm tube v waxte
* 3 kontejnera v waxte ( number 13, 12 and 11 )
&GEOP NP1=36,POVNAM='CIL' /
&GEOCIL Y0=0.,Z0=0.,R=18.9 /
&GEOP NP1=37,POVNAM='PLAN' /
&GEOPLN X=-312.5 /
&GEOP NP1=38,POVNAM='PLAN' /
&GEOPLN X=-313. /
&GEOP NP1=39,POVNAM='PLAN' /
&GEOPLN X=-389.5 /
&GEOP NP1=40,POVNAM='PLAN' /
&GEOPLN X=-390.5 /
&GEOP NP1=41,POVNAM='PLAN' /
&GEOPLN X=-467. /
&GEOP NP1=42,POVNAM='PLAN' /
&GEOPLN X=-468. /
&GEOP NP1=43,POVNAM='PLAN' /
&GEOPLN X=-544.5 /
&GEOP NP1=44,POVNAM='PLAN' /
&GEOPLN X=-545. /
* 9 sfer v 13-th kontejnere ( Xbot = -390. )
&GEOP NP1=45,POVNAM='SFER' &END
&GEOSFR X0=-381.8,Y0=0.,Z0=8.,R=7.5 /
&GEOP NP1=46,POVNAM='SFER' &END
&GEOSFR X0=-381.8,Y0=0.,Z0=-8.,R=7.5 /
&GEOP NP1=47,POVNAM='SFER' &END
&GEOSFR X0=-366.6,Y0=8.,Z0=0.,R=7.5 /
&GEOP NP1=48,POVNAM='SFER' &END
&GEOSFR X0=-366.6,Y0=-8.,Z0=0.,R=7.5 /
&GEOP NP1=49,POVNAM='SFER' &END
&GEOSFR X0=-351.4,Y0=0.,Z0=8.,R=7.5 /
&GEOP NP1=50,POVNAM='SFER' &END
&GEOSFR X0=-351.4,Y0=0.,Z0=-8.,R=7.5 /
&GEOP NP1=51,POVNAM='SFER' &END
&GEOSFR X0=-336.2,Y0=8.,Z0=0.,R=7.5 /
&GEOP NP1=52,POVNAM='SFER' &END
&GEOSFR X0=-336.2,Y0=-8.,Z0=0.,R=7.5 /
&GEOP NP1=53,POVNAM='SFER' &END
&GEOSFR X0=-321.,Y0=0.,Z0=0.,R=7.5 /
* 9 sfer v 12-th kontejnere ( Xbot = -467.5 )
&GEOP NP1=54,POVNAM='SFER' &END
&GEOSFR X0=-459.3,Y0=0.,Z0=8.,R=7.5 /
&GEOP NP1=55,POVNAM='SFER' &END
&GEOSFR X0=-459.3,Y0=0.,Z0=-8.,R=7.5 /
&GEOP NP1=56,POVNAM='SFER' &END
&GEOSFR X0=-444.1,Y0=8.,Z0=0.,R=7.5 /
&GEOP NP1=57,POVNAM='SFER' &END
&GEOSFR X0=-444.1,Y0=-8.,Z0=0.,R=7.5 /
&GEOP NP1=58,POVNAM='SFER' &END
&GEOSFR X0=-428.9,Y0=0.,Z0=8.,R=7.5 /
&GEOP NP1=59,POVNAM='SFER' &END
&GEOSFR X0=-428.9,Y0=0.,Z0=-8.,R=7.5 /
&GEOP NP1=60,POVNAM='SFER' &END
&GEOSFR X0=-413.7,Y0=8.,Z0=0.,R=7.5 /
&GEOP NP1=61,POVNAM='SFER' &END
&GEOSFR X0=-413.7,Y0=-8.,Z0=0.,R=7.5 /
&GEOP NP1=62,POVNAM='SFER' &END
&GEOSFR X0=-398.5,Y0=0.,Z0=0.,R=7.5 /
* 9 sfer v 11-th kontejnere ( Xbot = -545. )
&GEOP NP1=63,POVNAM='SFER' &END
&GEOSFR X0=-536.8,Y0=0.,Z0=8.,R=7.5 /
&GEOP NP1=64,POVNAM='SFER' &END
&GEOSFR X0=-536.8,Y0=0.,Z0=-8.,R=7.5 /
&GEOP NP1=65,POVNAM='SFER' &END
&GEOSFR X0=-521.6,Y0=8.,Z0=0.,R=7.5 /
&GEOP NP1=66,POVNAM='SFER' &END
&GEOSFR X0=-521.6,Y0=-8.,Z0=0.,R=7.5 /
&GEOP NP1=67,POVNAM='SFER' &END
&GEOSFR X0=-506.4,Y0=0.,Z0=8.,R=7.5 /
&GEOP NP1=68,POVNAM='SFER' &END
&GEOSFR X0=-506.4,Y0=0.,Z0=-8.,R=7.5 /
&GEOP NP1=69,POVNAM='SFER' &END
&GEOSFR X0=-491.2,Y0=8.,Z0=0.,R=7.5 /
&GEOP NP1=70,POVNAM='SFER' &END
&GEOSFR X0=-491.2,Y0=-8.,Z0=0.,R=7.5 /
&GEOP NP1=71,POVNAM='SFER' &END
&GEOSFR X0=-476.,Y0=0.,Z0=0.,R=7.5 /
&GEOZ NZ1=1, NPINZN=4, IPOV=+2,-9,-10,-36, MAT=3 /
&GEOZ NZ1=2, NPINZN=4, IPOV=-2,+8,-9,-10, MAT=2 /
&GEOZ NZ1=3, NPINZN=3, IPOV=+3,+10,-11, MAT=1 /
&GEOZ NZ1=4, NPINZN=4, IPOV=-3,+6,+10,-11, MAT=3 /
&GEOZ NZ1=5, NPINZN=4, IPOV=-6,+8,+10,-11, MAT=1 /
&GEOZ NZ1=6, NPINZN=3, IPOV=+1,+11,-12, MAT=1 /
&GEOZ NZ1=7, NPINZN=4, IPOV=-1,+7,+11,-12, MAT=3 /
&GEOZ NZ1=8, NPINZN=4, IPOV=-7,+8,+11,-12, MAT=1 /
&GEOZ NZ1=9, NPINZN=12, IPOV=+31,+33,-34,-22,-23,-24,-25,-26,-27,-28,-29,-30, MAT=1 /
&GEOZ NZ1=10, NPINZN=4, IPOV=-1,+5,+12,-13, MAT=3 /
&GEOZ NZ1=11, NPINZN=4, IPOV=-5,+8,+12,-13, MAT=1 /
&GEOZ NZ1=12, NPINZN=3, IPOV=+1,+13,-14, MAT=1 /
&GEOZ NZ1=13, NPINZN=4, IPOV=-1,+4,+13,-14, MAT=3 /
&GEOZ NZ1=14, NPINZN=4, IPOV=-4,+8,+13,-14, MAT=1 /
&GEOZ NZ1=15, NPINZN=3, IPOV=+1,+14,-15, MAT=1 /
&GEOZ NZ1=16, NPINZN=4, IPOV=-1,-20,+14,-15, MAT=3 /
&GEOZ NZ1=17, NPINZN=4, IPOV=+20,+8,+14,-15, MAT=1 /
&GEOZ NZ1=18, NPINZN=3, IPOV=+1,+15,-16, MAT=1 /
&GEOZ NZ1=19, NPINZN=4, IPOV=-1,-21,+15,-16, MAT=3 /
&GEOZ NZ1=20, NPINZN=4, IPOV=+21,+8,+15,-16, MAT=1 /
&GEOZ NZ1=21, NPINZN=3, IPOV=+19,+16,-17, MAT=3 /
&GEOZ NZ1=22, NPINZN=4, IPOV=-19,+8,+16,-17, MAT=1 /
&GEOZ NZ1=23, NPINZN=3, IPOV=+8,+17,-18, MAT=1 /
&GEOZ NZ1=24, NPINZN=1, IPOV=+22, MAT=4 /
&GEOZ NZ1=25, NPINZN=1, IPOV=+23, MAT=4 /
&GEOZ NZ1=26, NPINZN=1, IPOV=+24, MAT=4 /
&GEOZ NZ1=27, NPINZN=1, IPOV=+25, MAT=4 /
&GEOZ NZ1=28, NPINZN=1, IPOV=+26, MAT=4 /
&GEOZ NZ1=29, NPINZN=1, IPOV=+27, MAT=4 /
&GEOZ NZ1=30, NPINZN=1, IPOV=+28, MAT=4 /
&GEOZ NZ1=31, NPINZN=1, IPOV=+29, MAT=4 /
&GEOZ NZ1=32, NPINZN=1, IPOV=+30, MAT=4 /
&GEOZ NZ1=33, NPINZN=3, IPOV=+1,+32,-33, MAT=3 /
&GEOZ NZ1=34, NPINZN=3, IPOV=+1,+34,-35, MAT=3 /
&GEOZ NZ1=35, NPINZN=4, IPOV=+1,-31,+33,-34, MAT=3 /
&GEOZ NZ1=36, NPINZN=3, IPOV=+1,+12,-32, MAT=1 /
&GEOZ NZ1=37, NPINZN=3, IPOV=+1,-13,+35, MAT=1 /
* Steel 10-mm tube v waxte
* 3 kontejnera v waxte ( number 13, 12 and 11 )
&GEOZ NZ1=38, NPINZN=4, IPOV=-1,-9,-10,+36, MAT=1 /
&GEOZ NZ1=39, NPINZN=3, IPOV=+1,-10,-37, MAT=1 /
&GEOZ NZ1=40, NPINZN=4, IPOV=+1,-9,-31,+37, MAT=3 /
&GEOZ NZ1=41, NPINZN=3, IPOV=+31,+37,-38, MAT=3 /
&GEOZ NZ1=42, NPINZN=3, IPOV=+31,+39,-40, MAT=3 /
&GEOZ NZ1=43, NPINZN=3, IPOV=+31,+41,-42, MAT=3 /
&GEOZ NZ1=44, NPINZN=3, IPOV=+31,+43,-44, MAT=3 /
&GEOZ NZ1=45, NPINZN=3, IPOV=+31,+44,-9, MAT=5 /
* 9 sfer v 13-th kontejnere ( Xbot = -390. )
&GEOZ NZ1=46, NPINZN=12, IPOV=+31,+38,-39,-45,-46,-47,-48,-49,-50,-51,-52,-53, MAT=1 /
&GEOZ NZ1=47, NPINZN=1, IPOV=+45, MAT=4 /
&GEOZ NZ1=48, NPINZN=1, IPOV=+46, MAT=4 /
&GEOZ NZ1=49, NPINZN=1, IPOV=+47, MAT=4 /
&GEOZ NZ1=50, NPINZN=1, IPOV=+48, MAT=4 /
&GEOZ NZ1=51, NPINZN=1, IPOV=+49, MAT=4 /
&GEOZ NZ1=52, NPINZN=1, IPOV=+50, MAT=4 /
&GEOZ NZ1=53, NPINZN=1, IPOV=+51, MAT=4 /
&GEOZ NZ1=54, NPINZN=1, IPOV=+52, MAT=4 /
&GEOZ NZ1=55, NPINZN=1, IPOV=+53, MAT=4 /
* 9 sfer v 12-th kontejnere ( Xbot = -467.5 )
&GEOZ NZ1=56, NPINZN=12, IPOV=+31,+40,-41,-54,-55,-56,-57,-58,-59,-60,-61,-62, MAT=1 /
&GEOZ NZ1=57, NPINZN=1, IPOV=+54, MAT=4 /
&GEOZ NZ1=58, NPINZN=1, IPOV=+55, MAT=4 /
&GEOZ NZ1=59, NPINZN=1, IPOV=+56, MAT=4 /
&GEOZ NZ1=60, NPINZN=1, IPOV=+57, MAT=4 /
&GEOZ NZ1=61, NPINZN=1, IPOV=+58, MAT=4 /
&GEOZ NZ1=62, NPINZN=1, IPOV=+59, MAT=4 /
&GEOZ NZ1=63, NPINZN=1, IPOV=+60, MAT=4 /
&GEOZ NZ1=64, NPINZN=1, IPOV=+61, MAT=4 /
&GEOZ NZ1=65, NPINZN=1, IPOV=+62, MAT=4 /
* 9 sfer v 11-th kontejnere ( Xbot = -545. )
&GEOZ NZ1=66, NPINZN=12, IPOV=+31,+42,-43,-63,-64,-65,-66,-67,-68,-69,-70,-71, MAT=1 /
&GEOZ NZ1=67, NPINZN=1, IPOV=+63, MAT=4 /
&GEOZ NZ1=68, NPINZN=1, IPOV=+64, MAT=4 /
&GEOZ NZ1=69, NPINZN=1, IPOV=+65, MAT=4 /
&GEOZ NZ1=70, NPINZN=1, IPOV=+66, MAT=4 /
&GEOZ NZ1=71, NPINZN=1, IPOV=+67, MAT=4 /
&GEOZ NZ1=72, NPINZN=1, IPOV=+68, MAT=4 /
&GEOZ NZ1=73, NPINZN=1, IPOV=+69, MAT=4 /
&GEOZ NZ1=74, NPINZN=1, IPOV=+70, MAT=4 /
&GEOZ NZ1=75, NPINZN=1, IPOV=+71, MAT=4 /
&DETG NDETG=1,TIPDET='LOK' /
&DGLOK NDD=4,
NEKD=27,
DESET=0.01,0.05,.1,.15,.2,.25,.3,.35,.4,.45,
.5,.55,.6,.65,.7,.75,.8,.85,.9,.95,
1.,1.05,1.1,1.15,1.2,1.25,1.3,1.35,73*,
DEF=27*1.,73*,
XD=400.,300.,200.,100.,46*,
YD=2*124.6,2*157.1,46*
ZD=4*0.,46*,
SD1=4*0.,46*
/
&CONG CnstGamName='cnst_gam.b6',
NEL=18,NZONE=5,MPECH=0,
ELNAME=' 01h',' 06c',' 07n',' 08o',' 18ar0',' 11na0',' 12mg0',' 13al0',
' 14si0',' 17cl0',' 19k0',' 20ca0',' 24cr0',' 25mn0',' 26fe0',
' 28ni0',' 29cu0',' 82pb0',17*,
RO=0.,0.00692470,3*0.,
0.00000001,0.00025054,0.00079230,0.00005289,0.00001457,
0.00003913,4*0.,
0.00001051,0.04322342,3*0.,
0.00000026,4*0.,
0.,0.00060922,3*0.,
0.,0.00030912,3*0.,
0.,0.00194868,3*0.,
0.,0.01311095,0.00045742,0.00022620,0.00006231,
0.,0.00012528,3*0.,
0.,0.00040161,3*0.,
0.,0.00364656,3*0.,
0.,0.,0.00022878,0.00274913,0.00075725,
0.,0.00000695,0.00043305,0.00028910,0.00007963,
0.,0.00014853,0.08364946,0.00978606,0.00269556,
0.,0.,0.00024314,0.00135264,0.00037258,
0.,0.,0.00022463,0.00003749,0.00001033,
0.,0.00001289,3*0.,
2. Обеспечение диалогового режима для открытия файла с необходимой геометрией
private void openToolStripMenuItem1_Click(object sender, EventArgs e)
{
try
{
// открываем диалоговое окно для выбора открывающегося файла
if (this.openFileDialog1.ShowDialog() == DialogResult.OK)
{
// запоминаем имя файла
FileName = openFileDialog1.FileName;
char[] str = new char[1024];
// если файл существует
if (FileName == null)
FileName = "zzz.nam";
// копируем его в строковую переменную
FileName.CopyTo(0, str, 0, FileName.Length);
// загружаем бъект
Main.isgeom(str, ref NZON, NZN);
// открываем форму
Draw Child = new Draw();
Child.MdiParent = this;
Child.Show();
}
}
catch (Exception ex)
{
MessageBox.Show("Невозможно открыть файл " + openFileDialog1.FileName + "\n" + ex.Message);
}
3. Реализация первой прорисовки в плоскости YOZ в 2D режиме.
void PrepareArray(double X1, double Y1, Rectangle rect, ref double max, int cluster)
{
/* double start_posX = X+dx*rect.Width;
double start_posY = Y+dy*rect.Height;*/
double ZZ = -2000;
double UU = 0.0;
double VV = 0.0;
double WW = 0.0;
int height = rect.Height / cluster;
int width = rect.Width / cluster;
ScreenArray = new double[(height+1)*(width+1)];
ScreenZone = new int[(height+1)*(width+1)];
mas = new Point_description[(height + 1) * (width + 1)];
for (int i = 0, i1=0; i < rect.Width; i+=cluster, i1++)
{
double XX = X1 + dx * i;
for (int j = 0, j1=0; j < rect.Height; j+=cluster, j1++)
{
double YY = Y1 + dy * j;
switch (NumPln)
{
case 0:
{
UU = 1;
MainForm.vlet(ref ZZ, ref XX, ref YY, ref UU, ref VV, ref WW, ref ISTOP, ref KGEOM, ref AT);
if (ISTOP != 1)
{
ScreenArray[i1 * height + j1] = AT;
ScreenZone[i1 * height + j1] = KGEOM;
mas[i1 * height + j1].AT = AT;
mas[i1 * height + j1].KGeom = KGEOM;
MainForm.geom(ref KGEOM, ref ZZ, ref XX, ref YY, ref UU, ref VV, ref WW, ref KMAX, MS, AMR);
mas[i1 * height + j1].Zones = new int[KMAX];
mas[i1 * height + j1].Distances = new double[KMAX];
for (int ii = 0; ii < KMAX; ii++)
{
mas[i1 * height + j1].Distances[ii] = AMR[ii];
mas[i1 * height + j1].Zones[ii] = MS[ii];
}
}
else
{
ScreenZone[i1 * height + j1] = -1;
mas[i1 * height + j1].KGeom = -1;
}
ZZ = -2000.0;
break;
}
case 1:
{
VV = 1.0;
MainForm.vlet(ref XX, ref ZZ, ref YY, ref UU, ref VV, ref WW, ref ISTOP, ref KGEOM, ref AT);
if (ISTOP != 1)
{
ScreenArray[i1 * height + j1] = AT;
ScreenZone[i1 * height + j1] = KGEOM;
mas[i1 * height + j1].AT = AT;
mas[i1 * height + j1].KGeom = KGEOM;
MainForm.geom(ref KGEOM, ref XX, ref ZZ, ref YY, ref UU, ref VV, ref WW, ref KMAX, MS, AMR);
mas[i1 * height + j1].Zones = new int[KMAX];
mas[i1 * height + j1].Distances = new double[KMAX];
for (int ii = 0; ii < KMAX; ii++)
{
mas[i1 * height + j1].Distances[ii] = AMR[ii];
mas[i1 * height + j1].Zones[ii] = MS[ii];
}
}
else
{
ScreenZone[i1 * height + j1] = -1;
mas[i1 * height + j1].KGeom = -1;
}
ZZ = -2000;
break;
}
case 2:
{
WW = 1.0;
MainForm.vlet(ref XX, ref YY, ref ZZ, ref UU, ref VV, ref WW, ref ISTOP, ref KGEOM, ref AT);
if (ISTOP != 1)
{
ScreenArray[i1 * height + j1] = AT;
ScreenZone[i1 * height + j1] = KGEOM;
mas[i1 * height + j1].AT = AT;
mas[i1 * height + j1].KGeom = KGEOM;
MainForm.geom(ref KGEOM, ref XX, ref YY, ref ZZ, ref UU, ref VV, ref WW, ref KMAX, MS, AMR);
mas[i1 * height + j1].Zones = new int[KMAX];
mas[i1 * height + j1].Distances = new double[KMAX];
for (int ii = 0; ii < KMAX; ii++)
{
mas[i1 * height + j1].Distances[ii] = AMR[ii];
mas[i1 * height + j1].Zones[ii] = MS[ii];
}
}
else
{
ScreenZone[i1 * height + j1] = -1;
mas[i1 * height + j1].KGeom = -1;
}
ZZ = -2000;
break;
}
}
}
}
TransformArrayToMinBound(ScreenArray,ref max);
TransformArrayToMinBound(mas, ref max);
FindZones(mas,ref shownZones);
}
4. Реализация приближения/удаления фигуры по оси OZ при помощи клавиш «W» & «S» для 3D режима.
protected override bool ProcessDialogKey(Keys keyData)
{
switch (keyData)
{
case Keys.Down:
z--;
break;
case Keys.Up:
z++;
break;
}
Ant.Invalidate();
Ant.Update();
return base.ProcessDialogKey(keyData);
}
5. Реализация функций увеличения/уменьшения фигуры для 2D режима.
private void toolStripButton8_Click(object sender, EventArgs e)
{
//увеличение
Draw Child = (Draw)this.ActiveMdiChild;
double R = Child.drawSurf1.R /= 2;
Child.drawSurf1.ifNewLoaded = false;
switch (Child.drawSurf1.NumPln)
{
case 0:
{
Child.drawSurf1.Y += R /2;
Child.drawSurf1.Z += R /2;
break;
}
case 1:
{
Child.drawSurf1.X += R / 2;
Child.drawSurf1.Z += R / 2;
break;
}
case 2:
{
Child.drawSurf1.X += R / 2;
Child.drawSurf1.Y += R / 2;
break;
}
}
Child.drawSurf1.Invalidate();
}
private void toolStripButton9_Click(object sender, EventArgs e)
{
//уменьшение
Draw Child = (Draw)this.ActiveMdiChild;
Child.drawSurf1.ifNewLoaded = false;
double R = Child.drawSurf1.R *= 2;
switch (Child.drawSurf1.NumPln)
{
case 0:
{
Child.drawSurf1.Y -= R / 4;
Child.drawSurf1.Z -= R / 4;
break;
}
case 1:
{
Child.drawSurf1.X -= R / 4;
Child.drawSurf1.Z -= R / 4;
break;
}
case 2:
{
Child.drawSurf1.X -= R / 4;
Child.drawSurf1.Y -= R / 4;
break;
}
}
Child.drawSurf1.Invalidate();
}
6. Реализация поворота объекта по/против часовой стрелки при помощи колесика мышки.
public void Ant_MouseWheel(object sender, MouseEventArgs e)
{
if (e.Delta > 0)
{
angle++;
Ant.Invalidate();
}
else if (e.Delta < 0)
{
angle--;
Ant.Invalidate();
}
}
7. Реализация динамического управления фигурой с помощью различных клавиш
protected override bool ProcessDialogKey(Keys keyData)
{
switch (keyData)
{
// case Keys.Down:
case Keys.W:
z -= 20;
break;
case Keys.S:
z += 20;
break;
case Keys.A:
x -= 20;
break;
case Keys.D:
x += 20;
break;
case Keys.X:
y -= 20;
break;
case Keys.C:
y += 20;
break;
case Keys.I:
Zangle = 2;
angle+=Xangle;
break;
case Keys.K:
Zangle = 2;
angle-=Xangle;
break;
case Keys.J:
Yangle = 2;
angle+=Xangle;
break;
case Keys.L:
Yangle = 2;
angle-=Xangle;
break;
}
Ant.Invalidate();
Ant.Update();
return base.ProcessDialogKey(keyData);
}
8. Функция отрисовки трехмерного объекта.
public void Ant_Paint(object sender, PaintEventArgs e)
{
if (isdraw)
{
Gl.glClear(Gl.GL_COLOR_BUFFER_BIT Gl.GL_DEPTH_BUFFER_BIT);
Gl.glLoadIdentity();
mwheel = true;
//освещение-------------------------------------------
// Gl.glClearColor(0.2f, 0.2f, 0.2f, 0.9f);
float[] ambient = new float [4] {0.5f, 0.5f, 1.0f, 1.0f};//очищаем экран в цвет, установленый параметрами r,g,b,a
Gl.glEnable(Gl.GL_LIGHTING); //тут мы включаем расчет освещения
Gl.glLightModelf(Gl.GL_LIGHT_MODEL_TWO_SIDE, Gl.GL_TRUE);//делаем так, чтобы освещались обе стороны полигона
Gl.glLightModelfv(Gl.GL_LIGHT_MODEL_AMBIENT, ambient);//интенсивность всей сцены
Gl.glEnable(Gl.GL_NORMALIZE);//делам нормали одинаковой величины во избежание артефактов
float[] light0_position = { 1.0f, 7.0f, 1.0f, 1.0f };//Положение источника света (x,y,z,w)4-й параметр указывает, будет ли использоваться бесконечно удаленный свет или точечный. Если значение w = 0, то источник света бесконечно удаленный (что-то вроде солнца). Если w = 1, то этот источник света точечный (что то вроде лампочки).
Gl.glEnable(Gl.GL_LIGHT0);
Gl.glLightfv(Gl.GL_LIGHT0, Gl.GL_POSITION, light0_position);
Gl.glTranslated(x, y, z);//передвигаем
Gl.glRotated(angle, 0, 2, 0);//поворачиваем по углу
Gl.glColor3ub(39, 170, 220);
if (mwheel)
{
Luch luch = new Luch(new Point3D(0,-500,-8), new Point3D(0,1,0));
double at = 0.9;
int kgeom = 0;
int istop=0 ;
int kmax = 0;
double dx = 1; double dz = 1;
WorkWithDll.Vlet(ref luch, ref istop, ref kgeom, ref at);
//Список цветов для материалов объектов
Color[] Col=new Color[10];
Col[0] = new Color(0, 0, 128);
Col[1] = new Color(0, 255, 0);
Col[2] = new Color(255, 255, 0);
Col[3] = new Color(205, 133, 63);
Col[4] = new Color(255, 69, 0);
Col[5] = new Color(199, 21, 133);
Col[6] = new Color(148, 0, 211);
Col[7] = new Color(0, 191, 255);
Col[8] = new Color(84, 255, 159);
Col[9] = new Color(255, 193, 37);
if (istop != 1)
{
List<Rectangle> list = new List<Rectangle>();//список парал-дов
WorkWithDll.Geom(ref kgeom, ref luch, ref kmax, MS, AMR);
mass.Zones = new int[kmax];
mass.Distances = new double[kmax];
for (int j = 0; j < kmax; j++)
{
mass.Distances[j] = AMR[j];
mass.Zones[j] = MS[j];
list.Add(new Rectangle(new Point3D(luch.position.x, (luch.position.y + at) / 50, luch.position.z),
new Point3D(luch.position.x + dx, (luch.position.y + at + AMR[j]) / 50, luch.position.z + dz), Col[MS[j]%10]));//ne popadaet
at += AMR[j];
}
for (int i = 0; i < list.Count; ++i)
{
list[i].DrawRec();
}
}
}
Gl.glPopMatrix();
Gl.glFlush();
}
}
Размещено на Allbest.ru
Подобные документы
Основы метода Монте-Карло и его применение. Разработка и тестирование программного модуля для ПК BRAND, позволяющего строить двумерные и трехмерные изображения для сложных геометрических объектов для обеспечения контроля за качеством сборки конструкций.
дипломная работа [5,2 M], добавлен 10.10.2015Особенности разработки и реализации модулей двухмерной и трехмерной визуализации. Основные задачи трехмерного модуля управления. Анализ функций модуля управления ParamColorDrawer. Характерные особенности схемы функционирования программного средства.
реферат [2,2 M], добавлен 07.03.2012Освоение методов манипуляции параметрами SVG изображений при помощи JavaScript и возможности по анимации в современных браузерах. Интерфейс и структура модуля визуализации данных. Определение аномальных данных и их определение, реализованные типы.
курсовая работа [1,7 M], добавлен 20.05.2014Создание приложения, которое на вход получает компьютерную структуру, обрабатывает ее и выводит на экран. Краткое описание используемых пространств имен и классов. Файлы программного модуля Beta. Пример его работы, порядок подключения к Веб-странице.
дипломная работа [1,3 M], добавлен 06.07.2015Структурная диаграмма программного модуля. Разработка схемы программного модуля и пользовательского интерфейса. Реализация программного модуля: код программы; описание использованных операторов и функций. Вид пользовательской формы с заполненной матрицей.
курсовая работа [215,3 K], добавлен 01.09.2010Проектирование программного модуля: сбор исходных материалов; описание входных и выходных данных; выбор программного обеспечения. Описание типов данных и реализация интерфейса программы. Тестирование программного модуля и разработка справочной системы.
курсовая работа [81,7 K], добавлен 18.08.2014Разработка графического интерфейса проекта (панель инструментов имеет 6 кнопок). Процедуры разделов программы: документа ThisDocument, программного модуля Module1 и пользовательских форм UserForm1, UserForm2 и Деление_амёбы. Тестирование программы.
курсовая работа [29,5 K], добавлен 14.12.2010Характеристика основных методов для решения различных задач с помощью случайных последовательностей. Реализация и проверка эффективности метода Монте-Карло при его применении на различных примерах. Алгоритм метода имитации. Издержки неопределенности.
курсовая работа [98,9 K], добавлен 04.05.2014Разработка структурной диаграммы программного модуля. Представление схемы для основных расчетов выбранного приложения для создания прямоугольной матрицы. Особенности создания пользовательского интерфейса. Тестирование и отладка спроектированного модуля.
курсовая работа [648,4 K], добавлен 27.05.2015Разработка функциональной и структурной схемы программного средства. Реализация основного модуля программы. Реализация модуля печати и модуля обновлений. Изучение взаимодействия информационных технологий, методов их интеграции и обмена данными.
дипломная работа [3,2 M], добавлен 27.10.2017