Разработка и реализация программного модуля для трехмерной и двухмерной визуализации геометрических сборок для ПК BRAND
Основы метода Монте-Карло и его применение. Разработка и тестирование программного модуля для ПК BRAND, позволяющего строить двумерные и трехмерные изображения для сложных геометрических объектов для обеспечения контроля за качеством сборки конструкций.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | дипломная работа |
Язык | русский |
Дата добавления | 10.10.2015 |
Размер файла | 5,2 M |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
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 (см приложение 6,7).
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// Вопросы атомной наук и и техники. Серия: Физика ядерных реакторов, 2006, вып. 1, с. 74-84
3. .Андросенко А.А., Андросенко П.А. Комплекс программ BRAND для расчетов характеристик переноса излучения методом Монте-Карло. Вопросы атомной науки и техники. Сер. Физика и техника ядерных реакторов, 1985, вып. 7, с. 33.
4. Андросенко А.А., Андросенко П.А., Болонкина Г.В., Дубровина С.И., Кривцов А.С., Пупко С.В. Интегрированный константный модуль комплекса программ BRAND. Препринт ФЭИ-2565, Обнинск, 1996.
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.40308078616 /
* 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.ur
Подобные документы
Особенности разработки и реализации модулей двухмерной и трехмерной визуализации. Основные задачи трехмерного модуля управления. Анализ функций модуля управления ParamColorDrawer. Характерные особенности схемы функционирования программного средства.
реферат [2,2 M], добавлен 07.03.2012Реализация программного средства "Действия над матрицами". Разработка кода программного продукта на основе готовой спецификации на уровне модуля. Использование инструментальных средств на этапе отладки программного модуля. Выбор стратегии тестирования.
отчет по практике [296,1 K], добавлен 19.04.2015Структурная диаграмма программного модуля. Разработка схемы программного модуля и пользовательского интерфейса. Реализация программного модуля: код программы; описание использованных операторов и функций. Вид пользовательской формы с заполненной матрицей.
курсовая работа [215,3 K], добавлен 01.09.2010Проектирование программного модуля: сбор исходных материалов; описание входных и выходных данных; выбор программного обеспечения. Описание типов данных и реализация интерфейса программы. Тестирование программного модуля и разработка справочной системы.
курсовая работа [81,7 K], добавлен 18.08.2014Сравнительный анализ технологий тестирования. Разработка программного модуля "Интеллектуальная обучающая система для широкого перечня курсов". Обоснование необходимости и важности этапа отладки в процессе разработки данного программного обеспечения.
дипломная работа [101,2 K], добавлен 17.06.2011Разработка и реализация программы расчета заданных функций на языке программирования VBA. Математическая модель, параметры и характеристики задачи, критерии оценки эффективности созданного модуля. Разработка алгоритма и тестирование программного модуля.
курсовая работа [488,7 K], добавлен 08.09.2010Структурная диаграмма программного модуля. Нахождение суммы элементов, находящихся над главной диагональю. Реализация программного модуля: код программы; описание использованных операторов и функций. Особенности тестирования программного модуля.
курсовая работа [146,6 K], добавлен 01.09.2010Разработка программы в Turbo C++ Explorer для вычислений геометрических данных фигуры. Атрибуты объекта и представление данных в программе. Подпрограмма создания набора данных. Реализация защиты и правильности ввода данных и дополнительных функции.
курсовая работа [5,9 M], добавлен 22.02.2014Создание программного модуля, выполненного на языке программирования VBA (Visual Basic for Applications) и позволяющего во введенном массиве символов удалить все повторные вхождения этих символов. Разработка пользовательского интерфейса. Код программы.
курсовая работа [317,4 K], добавлен 11.10.2012Разработка программного модуля "органайзер", позволяющего вести телефонную книгу, книгу записей, а так же работать с фильтрами и отчетами по данным. Характеристика используемой ЭВМ, ОС и языка программирования. Описание переменных, процедур и функций.
курсовая работа [1,5 M], добавлен 25.12.2012