Моделирование воздействия теплового излучения на элементы космического аппарата
Имитационное моделирование влияния на космический аппарат, находящийся на поверхности Луны, прямого, отраженного и инфракрасного солнечного излучения с учетом ее вращения. Измерения температуры и модель поверхности Луны. Эфемериды движения небесных тел.
Рубрика | Астрономия и космонавтика |
Вид | дипломная работа |
Язык | русский |
Дата добавления | 30.08.2016 |
Размер файла | 1,8 M |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Размещено на http://www.allbest.ru/
Содержание
- Аннотация
- 1. Постановка задачи
- 2. Исходные данные
- 2.1 Модель КА для расчета
- 2.2 Измерения температуры и модель поверхности Луны
- 2.3 Эфемериды движения небесных тел
- 3. Расчет влияния инфракрасного излучения поверхности Луны на конструкцию космического аппарата
- 3.1 Физическое описание модели
- 3.2 Расчетная программа
4. Расчет влияния диффузного переотражения излучения элементами конструкции космического аппарата
4.1 Математическое описание модели
4.2 Алгоритм расчетной программы
- 5. Расчет влияния отраженного солнечного излучения от поверхности Луны на конструкцию космического аппарата
- 5.1 Физическое описание модели
- 5.2 Расчетная программа
- 6. Расчет влияния прямого солнечного излучения на элементы конструкции космического аппарата
- 6.1 Математическое описание модели
- 6.2 Алгоритм расчетной программы
- 7. Результаты расчета
- Заключение
- Список литературы
Приложения
Abstract
At the present time space mission Luna-25, which is a part of the lunar space program Luna-Resource, is developing by Federal Space Agency in collaboration with European Space Agency (ESA) which is intended to land spacecraft (SC) in Moon's south pole to take soil examples and return to Earth. This program is of high scientific interest in global space community. In this project actively participates European companies and domestic organizations as well, including NPO Lavochkin, Space Research Institute of the Russian Academy of Sciences and ESA.
The aim of the mission Luna 25 and Luna-Glob, as part of a program of Luna-Resource, a preliminary surface studies in the South pole of the Moon, in order to determine the most favorable places for landing subsequent spacecraft, and to clarify the presence of ice in the lunar regolith.
Since the work of the SC will occur in the extreme conditions of the lunar surface, during the mission planning it is needed to simulate this conditions to determine the initial data for the unit design as a part of landing complex. In this work, we carried out simulation modeling of the impact of direct and indirect solar radiation, infrared radiation associated with a temperature of surface and moon light reflections on the elements to each other of the spacecraft located at the surface Moon with respect of its rotation and position in space. Modelling of thermal flows is designed as a console application written in C ++ programming language.
Аннотация
В настоящее время Федеральным Космическим Агентством, совместно с Европейским Космическим Агентством (ESA), разрабатывается проект космической миссии Луна-25, являющаяся частью программы «Луна-Ресурс», в которой планируется посадка на поверхность Луны космического аппарата (КА) для взятия образцов лунной поверхности и его возвращение на Землю. Данная программа представляет высокий научный интерес для мирового космического сообщества. В проекте активно принимают участие как европейские компании, так и отечественные организации, в том числе НПО им. Лавочкина, Институт Космических Исследований РАН и ESA.
Целью миссии Луна-25 или Луна-Глоб, как части программы Луна-Ресурс, является предварительные исследования поверхности в области Южного полюса Луны, с целью определения наиболее благоприятных мест для посадки последующих космических аппаратов, а также позволит прояснить вопросы наличия льда в толщах лунного реголита. Поскольку работа аппарата будет происходить в экстремальных условиях лунной поверхности, при планировании миссии возникает необходимость моделирования этих условий с целью определения исходных данных для проектирования оборудования в составе посадочного комплекса. В настоящей работе выполнено имитационное моделирование влияния на космический аппарат, находящийся на поверхности Луны с учетом ее вращения и обновлением положения, прямого и отраженного солнечного излучения, инфракрасного излучения, связанного с собственной температурой Луны и переотражения излучения элементами аппарата друг на друга. Моделирование тепловых потоков выполнено в виде консольного приложения написанного на языке программирования С++.
1. Постановка задачи
В качестве предполагаемого места высадки космического аппарата в составе миссии Луна-Глоб, рассматривается несколько возможных мест посадки космического аппарата, где особо отмечено наиболее перспективное - это высадка на Южном полюсе Эйткен. Южный полюс Луны представляет особый научный интерес, поскольку из-за того, что ось вращения Луны почти перпендикулярна к плоскости эклиптики, что приводит к тому, что эта область большую часть времени находится в тени.
Тепловое состояние элементов конструкции космического аппарата на поверхности Луны определяется внешними тепловыми потоками. Суммарный тепловой поток может рассматриваться как суперпозиция отдельных потоков на каждом шаге по времени с учетом позиции тел солнечных системы в реальных эфемеридах расчетного периода:
(2.1)
где: - полное излучение, принимаемое космическим аппаратом;
- прямое солнечное излучение;
- излучение, отраженное от поверхности Луны;
- тепловое излучение поверхности Луны;
Таким образом, данная задача, определения полного излучения, действующего на КА может быть разбита на подзадачи определения отдельно действующего прямого, отраженного и инфракрасного излучения. При расчете конечная модель должна учитывать положение и ориентацию Луны, Солнца и места посадки относительно друг друга, геометрию аппарата, его положение и ориентацию.
2. Исходные данные
Модель принимает на вход:
· описание геометрии аппарата в виде твердотельной модели, выполненной в САПР SolidWorks;
· описание геометрии поверхности Луны в месте предполагаемой посадки;
· положение Луны и Солнца в расчетный период и время, в которое необходимо произвести расчет;
2.1 Модель КА для расчета
Предполагаемая конструкция космического аппарата Луна-25, представлена в виде файла трехмерной модели формата STL (STereoLitography), который описывает геометрию поверхностей трехмерного объекта без информации о цвете, текстуре или атрибутов, присущих файлам CAD систем. STL файл представлен в виде ASCII символов с декартовыми координатами вершин треугольников из которых состоит дискретизованная поверхность рассматриваемого объекта и их нормалей, определяющих внешнюю сторону элементарной поверхности.
Рис. 1. Модель космического аппарата Луна-25
Детализация модели понижена, путем перестраивания исходной модели в низкополигональную, без сильной потери точности последующих расчетов, что позволит существенно снизить время работы расчетной программы. Для построения упрощенной модели использовалась система автоматизации проектирования SolidWorks.
2.2 Измерения температуры и модель поверхности Луны
Лунная поверхность места посадки моделируется как плоскость и импортируется в формат STL как дискретизованная поверхность. Модель космического аппарата помещается в центр смоделированной поверхности. Обе модели приводятся к одной системе координат. Координаты предполагаемого места посадки - 80?ю.ш., 48 з.д., выбраны на основе информированности о морфологических характеристиках выбранного участка, полученных с изображений поверхности [5], а также на основании данных полученных нейтронным спектрометром LEND. Данные о локальных температурах данного участка взяты из Planetary Data System и представляют собой измерения НА Diviner установленной на борту КА NASA LRO.
2.3 Эфемериды движения небесных тел
Для получения эфемерид и расчета вектора состояния (координаты и время) небесных тел относительно друг друга, использована библиотека NAIF SPICE, позволяющая осуществлять преобразование векторов положения небесных тел и приводить их к единой системе координат. SPICE - это информационная система разработанная для планирования космических мисси и обработки научных наблюдений с космических аппаратов. Основные виды данных используемых в SPICE, kernels, включают в себя данные о положении и ориентации тел солнечной системы как функция от времени, их физические параметры такие как размер, гравитационные постоянные. Средства библиотеки SPICE для языка C содержат функции преобразования в требуемые системы координат, а также функции векторных и матричных операций [9].
Данные о эфемериде Луны и ее ориентации, в движущейся относительно барицентра солнечной системы, системы координат в конкретный период времени с учетом возмущающих воздействий на орбиту другими небесными телами получены из базы данных JPL NASA как текстовые таблицы вида координаты-время (kernels), используемые для расчетов.
3. Расчет влияния инфракрасного излучения поверхности Луны на конструкцию космического аппарата
3.1 Физическое описание модели
При расчете используется метод моделирования излучения между идеальными диффузными поверхностями или также известными как Ламбертовы, т.е. все элементарные поверхности рассматриваемых объектов «серые» и изотермические, излучающие и поглощающие энергию диффузно, т.е. одинаково во всех направлениях. Метод может быть применен к различным конфигурациям рассматриваемых объектов и их расположения относительно друг друга, а также позволяет учитывать несколько излучающих источников. Такой метод расчета используется как при тепловых инженерных расчетах, так и при моделировании реалистичного освещения в компьютерной графике [2][3].
Местное тепловое состояние для элементарной поверхности должно учитывать геометрию рассматриваемых объектов в замкнутой системе, поскольку ею определяется количество излучения, попадающего на принимающую поверхность от излучающей. Геометрия положения поверхностей друг относительно друга и соответственно их тепловое влияние друг на друга определяется безразмерным коэффициентом взаимной видимости. Одним из главных преимуществ данного метода расчета, является то, что получающиеся в результате значения потоков энергии инварианты положению наблюдателя и поэтому могут быть предварительно рассчитаны, а затем использованы в динамически моделях с изменяющимся положением наблюдателя.
Радиационная энергия излучается во все стороны с элементарной площадки площадью dA1. Интенсивность излучения в одном направлении определяется как:
(3.1)
где:
i - интенсивность излучения в одном направлении, т.е. количество энергии в каждый момент времени на единицу спроектированной в направлении принимающей площадки на один стерадиан телесного угла, Вт/м2 ·стерадиан;
dP - излученная площадкой энергия в направлении ц телесного угла dщ, Вт/м2;
- полярный угол в направлении от нормали излучающей поверхности в рассматриваемую сторону, град;
dщ - дифференциал телесного угла, стерадиан;
Для модели отражения по Ламберту распределения отраженного света выражается как:
(3.2)
где k - константа. Поскольку интенсивность, является функцией площади, спроектированной как телесный угол, то интенсивность меняется на cos, т.е.:
(3.3)
Откуда получим, что интенсивность не зависит от направления излучения. Полная энергия, излучаемая элементарной площадкой может быть найдена интегрированием по телесному углу на полусфере:
(3.5)
Для ламбертовых поверхностей формула преобразуется как:
(3.6)
Местное тепловое состояние для элементарной поверхности должно учитывать геометрию рассматриваемых объектов в замкнутой системе, поскольку этим определяется количество излучения, попадающего на принимающую поверхность от излучающей. Геометрия положения поверхностей друг относительно друга и соответственно их тепловое влияние друг на друга определяется безразмерным коэффициентом взаимной видимости, который определяется формой, положением, размером и ориентацией излучающей площадки. Для расчета необходимо что бы на каждой элементарной площадке были заданы ее физические характеристики - поглощающая способность (степень черноты) и альбедо. Поскольку используется модель излучения по Ламберту, то полная энергия, попадающая на принимающую площадку может рассматриваться как суперпозиция излученной и отраженной в процессе переизлучения энергии.
В порядке определения коэффициентов взаимной видимости между двумя площадками, сначала определим их для бесконечно малых площадей. Телесный угол из dAi покрывающий dAj:
(3.7)
тогда, воспользовавшись (4.1) и (4.6), энергия, излученная dAi на dAj на один радиан:
(3.8)
Полная энергия, покидающая dAi, на полусфере равна , коэффициент видимости представляет собой часть этой энергии которая попадает непосредственно на dAj, поэтому:
(3.9)
Произведя дискретизацию расчетной области на элементарные треугольники, зная их альбедо и поглощающую способность, количество полной энергии излученной площадкой вычисляется как сумма инфракрасного излучения, связанного с собственной температурой излучающей площадки на коэффициент поглощения, и интеграла по всем излучающим элементарным площадкам умноженной на альбедо, коэффициент взаимного влияния и на логическую функцию видимости:
(3.10)
где: - полная энергия (отраженная и излученная) покидающая элемент площадью ;
- излучение черного тела элементом площадью ;
- альбедо элемента;
r - расстояние между элементами x и x';
и - соответствующие углы между нормалью элемента и вектором расстояния между ними;
- логическая функция видимости, равная 1 если элементы видят друг друга и 0 если нет.
Имея в виду, что поверхность Луны и космического аппарата аппроксимированы счетным количеством элементарных площадок (треугольников), каждая из которых излучает собственное количество инфракрасной энергии Ei, получаем уравнение дискретного излучения:
(3.11)
где: Fij - коэффициент взаимной видимости между i-ой и j-ой площадкой;
При моделировании влияния инфракрасного излучения Луны на элементы конструкции космического аппарата излучение черного тела Ei рассчитывается по закону Стефана-Больцмана:
(3.12)
где: - постоянная Стефана-Больцмана, равная Вт/(м2·К4);
- температура Лунной поверхности в рассматриваемой точке. К
3.2 Расчетная программа
Расчетная программа производит чтение файлов STL модели и поверхности и записывает их в контейнеры типа «очередь» (deque) как объекты класса triangle. Класс triangle разработан для упрощения работы с объектами и представляет собой класс, в котором определены поля - координаты каждой из вершин, координаты барицентра треугольника и координаты нормированного вектора нормали, а также поля значений каждого компонента излучения для данного треугольника и их характеристики - площадь, альбедо, коэффициент поглощения. Вершины и нормали представляют объекты класса point и их содержание в классе triangle представляет собой композицию классов. По завершению работы функции чтения STL файла в памяти находится «очередь» из объектов класса triangle, для дальнейшей обработки. Результат выполнения записывается в соответствующее поле рассчитываемого объекта класса triangle.
Рис. 2. Структура класса triangle
Косинусы между нормалью и вектором в расчетной программе преобразуются как:
, (3.13)
Тогда формула расчета коэффициентов видимости () преобразована, так что:
(3.14)
где: - расстояние между центрами треугольников в евклидовой норме;
Площадь принимающего треугольника рассчитывается по формуле как абсолютная величина векторного произведения:
(4.15)
где:
,
,
(4.16)
где: , , - координаты n-ой вершины рассматриваемого треугольника;
Логическая функция видимости Vis, определяется из знака проекции векторов нормалей рассматриваемых треугольников друг на друга:
Размещено на http://www.allbest.ru/
Размещено на http://www.allbest.ru/
(4.16)
Рис. 3. Расчетная схема к определению инфракрасного излучения
4. Расчет влияния диффузного переотражения излучения элементами конструкции космического аппарата
4.1 Математическое описание модели
4.1.1 Модель «Radiocity»
Расчет излучения в результате переотражения элементами космического аппарата друг на друга выполнятся с использованием модели «Radiocity». Уравнение (4.1) для дискретной модели переотражения запишем как:
(4.1)
В этом уравнении второе слагаемое представляет собой вклад суммарной энергии, отраженной от всех поверхностей, которые «видят» i-ую площадку, в полную энергию излучения. Значения Bi рассчитываются и затем используются как Bj для уточнения их значений. В итоге получается итерационный процесс, который, если сходится, при предельном переходе дает точное решение.
В общем случае данная формулировка приводит к N линейных уравнений с N неизвестными Bi и параметрами Ei, pi, Fij, которые должны быть известны или определены в ходе расчета для каждой элементарной площадки. Таким образом, рассчитав значение все коэффициентов взаимной видимости может можно составить систему из N уравнений вида (4.1) с N неизвестных излучений на каждой площадке:
(4.2)
Переписывая систему уравнений (4.2) в матричном виде как итерационный процесс:
(4.3)
Такое же уравнение получим для предыдущей итерации:
(4.4)
Вычитая одно уравнение из другого:
(4.5)
Итерационный процесс будет сходится при:
(4.6)
что выполняется при условии:
(4.7)
Получаем, что итерационный процесс сходится при сходимости (4.7) в какой-либо матричной норме. Взяв норму , определяемую как максимум по строкам:
(4.8)
Обозначив как q и пользуясь свойствами норм и тем, что q - это и число имеем:
(4.9)
Для коэффициентов видимости диффузной модели справедливы соотношения взаимности:
(4.10)
В незамкнутой системе, в которой часть излученной энергии рассеивается в пространство справедливо соотношение:
(4.11)
Поскольку излучающая площадка не видит сама себя, то для всех i:
(4.12)
Из свойства (4.12) и так как альбедо элементарной площадки итерационный процесс будет сходиться, т.к. при любых i, j и m:
(4.13)
4.1.2 Метод Гаусса-Зейделя решения систем линейных уравнений
Для решения системы линейных уравнений (4.18) воспользуемся итерационным методом Гаусса-Зейделя. Перепишем (4.18) в матричном виде:
(4.14)
Матрица А разлагается на нижнюю треугольную с главной диагональю и верхнюю треугольную U:
(4.15)
тогда система преобразуется:
(4.16)
и переписывая как итерационный процесс:
(4.17)
где и k-ое и (k+1)-ое приближение точного решения :
(4.18)
Так как - верхняя треугольная, то компоненты вектора могут быть найдены методом прямой подстановки:
(4.19)
где i, j = 1, 2, …, n.
4.1.3 Алгоритм Z-буфера
Преобразования вида
Для определения функции видимости в программе используется алгоритм Z-буфера. Идея метода состоит в том, чтобы поместить камеру в центр излучающего объекта в направлении излучения, затем все объекты рассматриваемой сцены приводятся к системе координат связанной с позицией камеры и направлением ее видимости, из точки позиции камеры моделируется луч в направлении рассматриваемого треугольника, и функция видимости проверяет пересечения луча с остальными объектам сцены. Если зафиксировано несколько пересечений, программа сравнивает расстояние до пересеченных объектов и рассчитывает излучение с ближайшим, отсортировывая остальные [4].
При работе с трехмерными моделями для корректного представления вводятся такие понятия матрицы преобразования камеры и матрицы преобразования вида. Матрица преобразования камеры действуя на вектор координат положения камеры меняет ее положение и ориентацию в заданном фрейме. Матрица вида преобразует все координаты из фрейма сцены в фрейм вида камеры. Определяя матричные операторы как составленные из векторов-столбцов координатных ортов фрейма, получаем для каждого вектора:
(4.20)
где v -исходный вектор,
М - матричный оператор аффинного преобразования,
v' - преобразованный вектор.
Здесь оператор М - суперпозиция канонических преобразований:
(4.21)
где Т - оператор трансляции, R - оператор поворота.
Камера является объектом сцены, поэтому для смены положения камеры применяется оператор М. Поскольку сцена рендерится с позиции камеры в пространстве, то для преобразования всех объектов сцены во фрейм камеры, требуется найти преобразование V такое, что:
(4.22)
где I - единичная матрица. Получаем, что искомое преобразование:
(4.23)
Координатная система камеры образуется тремя ортонормированными векторами , а позиция камеры определяется точкой в исходном фрейме, которая также является началом координат фрейма камеры. По определению камера «смотрит» в направлении , которое можно вычислить, зная точку визирования :
(4.24)
Остальные координатные орты можно определить, используя вектор (0,0,1), тогда:
(4.25)
(4.26)
Теперь можно определить оператор преобразования объектов исходной системы координат во фрейм камеры. Объединяя оператор трансляции и оператор поворота в матрицу 4х4, получим оператор изменения положения и ориентации камеры в исходном фрейме:
(4.27)
Тогда оператор преобразования сцены во фрейм камеры, определенного вышеописанным образом к единичной матрице, т.е. к исходному фрейму:
(4.28)
Так как матрица R ортогональная, а, следовательно, симметричная относительно главной диагонали, то R-1= RT, тогда искомый оператор вычисляется как:
(4.29)
Поиск пересечений луча с объектом
Запишем уравнение луча из начала координат в параметрическом виде:
(4.30)
где D - нормированный вектор направления луча,
О - начало координат,
t - параметр длины вектора. Положение треугольника определяется координатами его вершин V0, V1, V2.
Рис. 4. Расчетная схема преобразований вида
Точка на треугольнике определим как:
(4.31)
где (u, v) - барицентрические координаты точки внутри треугольника, если выполняются условия . Пересечение луча и точки на треугольнике равносильно утверждению или:
(4.32)
Уравнение (4.32) может быть записано в матричном виде как:
(4.33)
Решая систему линейных уравнений (4.49) находим барицентрические координаты точки пересечения (u, v) и расстояние t до нее от начала координат.
Переобозначим , и . Пользуясь метод Крамера, запишем решение системы линейных уравнений (4.34):
(4.34)
Воспользовавшись свойством перестановки элементов смешанного произведения система (4.50) преобразуется:
(4.35)
где и .
4.2 Алгоритм расчетной программы
Как было отмечено выше задача определения влияния переотражения сводится к решению системы линейных уравнений (4.35), которая с учетом свойства (4.36) преобразуется к виду:
(4.36)
где сначало необходимо уcтановить коэфициент видимости между элементами и функцию видимости. Функция видимости проецирует сцену в пространство камеры и выполняет поиск обьекта принимающего излучение и расчитывает коэфицент видимости. После формирования матрицы система решается методом Гаусса - Зейделя и результаты расчета записываются в поле обьекта класса и выводятся в файл формата txt.
Алгоритм работы основной функции в виде псевдокода записывается следующим образом:
makeIdentidy( );
for ( i triangles ) {
setCamera( );
for ( j triangles ) { projectToCamSpace( ); }
for ( projected triangles ) {
vector3d ray (i, j);
for ( projected triangles ) {
if ( intersection( ) == true) {
if ( ||ray|| < || intersection || ) {
continue;
} else {
computeViewFactor ( ); }
} else {
computeViewFactor ( ); }
}}}
while ( convergence ( ) == false )
solveGaussSeidel ( );
Функции используемые в расчетной программе:
makeIdentidy ( ) - функция создающая еденичную матрицу размера NxN;
setCamera( ) - помещает камеру в центр излучающего треугольника;
projectToCamSpace( ) - проецирует все обьекты сцены в фрейм камеры;
setProjectionPlane( ) - функция определяющая высоту и ширину проекционной плоскости как максимальная и минимальная координата х, у;
vector3d ray (i, j) - вектор растояния между центрами рассматриваемых треугольников. Далее в цикле проверяется наличия пересечения этого вектора с остальными треугольниками спроецироваными во фрейм камеры;
if ( intersection( ) == true) - проверяет наличие пересечения и возвращает true если зафиксировано пересечение;
if (||ray|| < || intersection || ) - сравниваются нормы вектора расстояния между центрами рассматриваемых треугольников и вектором из излучающего треугольника до точки пересечения другого треугольника. Если возвращает true, значит треугольник «не видно»;
computeViewFactor( ) - функция рассчитывет коэфициент взаимной видимости с ближайшим треугольником и помещает его в массив матрицы коэфициентов;
convergence ( ) - определяет сходимость решения в Евклидовой норме;
solveGaussSeidel ( ) - решение системы методом Гаусса-Зейделя;
5. Расчет влияния отраженного солнечного излучения от поверхности Луны на конструкцию космического аппарата
5.1 Физическое описание модели
При расчете строится аппроксимационная модель поверхности Луны в виде плоскости заданного радиуса. Ориентация плоскости в пространстве определяется из положения Луны относительно барицентра солнечной систем, ее ориентации и с учетом собственного вращения, которые вычисляются в программе на каждом шаге по времени.
Количество солнечного излучения, отраженного от Луны, попадающего на космический аппарат в момент времени t:
(5.1)
где: - принимаемое КА (плоскостью) излучение;
- поглощающая способность аппарата;
- площадь принимающей плоскости;
dij - расстояние между Землей и КА;
- солнечное излучение, отраженное от поверхности Луны;
Солнечное излучение, отраженное от поверхности Луны, рассчитывается для каждого элементарного треугольника аппроксимации поверхности и предполагает предварительное вычисление количества излучения, попадающего на Луну от Солнца, при этом могут быть сделаны допущения о представлении солнца ка о излучающей точке и постоянном альбедо Луны:
(5.2)
где: - излучающая способность Солнца;
- альбедо Луны;
- площадь элементарного треугольника аппроксимации Луны;
rsp - расстояние между местом посадки КА на Луне и Солнцем;
- угол между нормалью элемента и вектором расстояния;
Вектор расстояния от Солнца к точке Луне расчитывается в момент времени t в реальных эфемеридах с учетом ориентации и вращения Луны и определения форма Луны как трехосного элипсойда.
5.2 Расчетная программа
Алгоритм вычисления солнечного излучения отраженного от поверхности Луны на конструкции космического аппарата и используемый в расчетной программе предполагает предварительное вычисление количесва солнечного излучения попадающего на рассматриваемую область поверхности Луны, а затем вычисление излучения от поверхности попадающего на космический аппарат по алгоритму, описанному в предидущих разделах данной работы. Функция расчитывающая прямое солнечное изучени на поверхность Луны в псевдокоде может быть записана следующим образом:
if ( occulted( ) == false ) {
getPositionOfPoint( );
computeIlluminationAngles( );
for ( surface triangles ) {
computeFlux ( );
}
}
где:
occulted( ) - логическая функция проверяющая находится ли точка на поверхности Луны в тени;
getPositionOfPoint( ) - функция определяет положение рассматриваемой точки на поверхности Луны с учетом положения, ориентации и вращения.
computeFlux( ) - функция вычисляет отраженнное от Луны солнечное излучение на коснтрукцию космического аппарата для каждоко элементраного треугольника аппроксимации модели. Функция computeFlux производит расчет коэфициентов и функцию видимости по алгоритму аналогичному при расчете собственного теплового излучения Луны.
Рис. 6. Расчетная схема определения прямого Солнечного излучения на поверхности Луны
Расчет векторов состояния тел солнечной системы производиться изпользованием библиотеки SPICE для языка С. Точка на поверхности Луны рассматривается как элемент солнечной истемы со своей орбитой. Вычисление всех векторов состояния производятся в единой неинерциальной системе отсчета, начало координат которой находитсяв барицентре Луны с обновление в каждый момент времени. Искомый вектор вычисляется функцией библиотеки SPICE illumin_c, которая принмает на вход:
· координаты барицентра Луны в системе координат J2000;
· расчетная эпоха;
· система координат в которой производится расчет;
· релятивистские попправочные константы;
· положение Солнца как обозревающего тела;
· положение рассматриваемой точки в декартовых координатах;
Результатом работы функции является координаты вектора rsp и угол между нормалью к поверхности Луны в рассматриваемой точке и вектором rsp. Координаты точки в фрейме Луны получаются применением функции rec_lat, преобразующей геодезические координаты в декартовы.
Функция occulted принимает на вход координаты в луном фрейме барицентров Солнца и Луны и вектор положения рассматриваемой точки на поверхности Луны и расчитывает угловой радиус между вектором положения точки и вектором положения барицентра Солнца. Если расчитанный угловой радиус не превышает радиус Луны (угловой радиус в радианах из рассматриваемой точки), тогда точка находится в тени и функция occulted возвращает true.
6. Расчет влияния прямого солнечного излучения на элементы конструкции космического аппарата
6.1 Математическое описание модели
Прямое солнечное излучение на модели КА рассчитывается аналогичным образом как для поверхности Луны, т.е. делая допущения о Солнце как о излучающей точке и постоянном альбедо, но с добавлением функции логической видимости, поскольку элементы конструкции аппарата могут перекрывать друг друга:
(6.1)
где: - излучающая способность Солнца;
- коэффициент поглощения излучения КА;
- площадь элементарного треугольника аппроксимации КА;
rsp - расстояние между местом посадки КА на Луне и Солнцем;
- угол между нормалью элемента и вектором расстояния;
Функция видимости определяется аналогично, как в модели «Radiosity», с помещением камеры в барицентр солнца и преобразованием сцены в пространство камеры, затем моделируется проекционная плоскость, определяется наличие пересечение моделируемого из Солнца в сторону КА луча и т.д.
Для осуществления расчета необходимо привести объекты сцены к единому фрейму (системе координат) Луны. Приведение места посадки и Солнца в фрейм Луны осуществляется функциями SPICE. Для приведения вершин треугольников аппроксимационной модели космического аппарата Луна-25 в точку на поверхности Луны в соответствующей системе координат используется формула поворота Родрига для поворота относительно оси перпендикулярной плоскости образуемой векторами и , т.е. вектором:
(6.3)
где: - ось Z фрейма Луны;
- вектор положения точки посадки в фрейме Луны;
k - ось вращения;
Тогда координаты вершин треугольников модели КА в фрейме Луны могут быть найдены последовательным применением формулы поворота Родрига и затем операции трансляции:
(6.4)
(6.5), где:
(6.6)
6.2 Алгоритм расчетной программы
Программа для расчета коэфициентов, преобразований вида и получений векторов состояния обьектов использует функции описаные в предидущих разделах, предварительно выполнив преобразования вершнин треугольников модели в расчетный фрейм.
В результате работы программы получаем значения прямого солнечнго излучения на каждом элементарном треугольнике модели космического аппарата.
Алгоритм расчета прямого солнечного излучения на элементы конструкции космического аппарата в виде псевдокода записывается следующим образом:
setCamera( );
for ( spacecraft triangles ) {
vector3d kRotationAxis ( Z x r );
Rotate ( );
Translate ( ); }
for ( spacecraft triangles ) { projectToCamSpace( ); }
for ( projected triangles ) {
vector3d ray (i, j);
for ( projected triangles ) {
if ( intersection( ) == true) {
if ( ||ray|| < || intersection || ) {
continue;
}
else
{
computeViewFactor ( ); }
}
else
{
computeViewFactor ( ); }
}
}
}
Рис. 7. Расчетная схема определения прямого Солнечного излучения на поверхности Луны
имитационный космический аппарат луна солнечный
7. Результаты расчета
Программа производит расчет излучения на промежутке времени и выводит результаты расчета прямого, отраженного и температурного излучения в заданный период. С целью определения участков времени с наиболее интенсивными потоками, смоделирована плоскость единичной площади, перпендикулярная лунной поверхности и ориентированная произвольным образом.
Рис. 8 Поток излучения на плоскость в точке посадки на период с 1.01.2015 г. по 1.01.2016 г.
Температурное излучение в точке посадки расчитывается на основе замеров температуры электронным спектрометром и получены из базы данных Planetary Data System. Максимальное значение температуры поверхности в течении лучнных суток достигается при наибольшей высоте солнца в рассматриваемой точке. В выбраный период - с 3.03.2015 г. по 12.03.2015 г. максимум температуры достигается 7.03.2015 г.
Рис. 9. Поток излучения на плоскость в точке посадки на период с 3.03.2015 г. по 12.03.2015 г.
Расчет излучения на элементы конструкции космического аппарата находящегося в точке предполагаемой посадки производился в момент 7.03.2015 г. Для оценки каждого компонента излучения в отдельности и суммарного излучения с учетом переотражения элементов друг на друга. Результаты представлены в виде излучающей способности каждого треугольника аппроксимации.
Рис. 10. Компоненты излучения элементов конструкции
Рис. 12. Суммарное излучение и излучение с учетом переотражения
Рис. 13. Компоненты излучения на принимащие плоскости
Для оценки входящих потоков излучения смоделированы принимающие плоскости на которых расчитываются компоненты излучения. Результаты представлены как поток излучения проходящий через еденичную площадь ориентированную заданым образом. Расчетный момент времени выбран на основе предидущих результатов и максимального значения температуры в предполагаемой точке посадки, что соответствует максимальному потоку излучения в течении лунных суток.
Заключение
Был проведен существующих методов тепловых расчетов конструкций, благодаря которому сформировано математическое описание и алгоритм решения поставленной задачи. Исходная модель была подготовлена для расчета путем перестраивания в модель с меньшим количеством полигонов и импортирована в формат STL. Была сформирована многополигональная трехмерная модель лунной поверхности, приведенная к общему началу координат с расчетной и импортирована в формат STL. На языке С++ написана расчетная программа, считывающая файлы STL модели и поверхности Луны. Программа осуществляет вывод промежуточных и конечного результатов работы в виде файлов формата txt. При определении суммарного количества теплового инфракрасного излучения Луны, попадающего на аппарат использована модель «Radiosity», в которой для определения коэффициентов взаимной видимости элементов, принята модель отражения по Ламберту. Для определения значения функции видимости был реализован алгоритм «Fast, Minimum Storage Ray/Triangle Intersection» и алгоритм Z-буфера для отсортировки невидимых поверхностей. Программа производит расчет в реальных эфемеридах, используя библиотеку SPICE для языка C++, с помощью которой также реализованы функция, проверяющая находится ли точка на поверхности Луны в тени и функция расчета солнечных углов. Для определения суммарного значения излучения в результате переотражения элементами аппарата друг на друга реализован итерационный метод Гаусса-Зейделя решения систем линейных уравнений. Получены компоненты входящих потоков излучения и компоненты излучений элементов конструкции.
Список литературы:
1. Vasavada A.R., et al. «Near-Surface Temperatures on Mercury and the Moon and the Stability of Polar Ice Deposits», Icarus141, 179-193, 1999
2. Goral, C.M., et al. «Modeling the interaction of light between diffuse surfaces», Comput. Graphics 18, 213-222, 1984.
3. Siegel R. and J.R. Howell «Thermal Radiation Heat Transfer», Hemispheres, 1981
4. Moller T. and Trumbore B. «Fast, Minimum Storage Ray/Triangle Intersection», Journal of Graphics Tools 21-28, 1997.
5. М.А. Иванов и др. «Геологический контекст потенциального места посадки экспедиции Луна-Глоб», Астрономический вестник, том 48, №6, с. 423-435, 2014
6. Слюта Е.Н., Галимова Э.М., Маров М.Я. и др. «Фундаментальные космические исследования» - М.: ФИЗМАТЛИТ, 2014г
7. Слюта Е.Н. и др. «Луна - шаг к технологиям освоения Солнечной системы» - М.: РКК «Энергия», 2011г
8. В.Д. Кротиков, В.С. Троицкий «Радиоизлучение и природа Луны», Успехи физических наук, 1963г.
9. Angel E. «Interactive Computer Graphics», Addison-Wesley, 2000
Приложение 1
main.cpp
#pragma once
#define _CRT_SECURE_NO_WARNINGS
#include <vector>
#include <deque>
#include <fstream>
#include "FUNC.h"
#include "TRIANGLES.h"
//#include "POINT.h"
#include "MAKE_SCENE.h"
//include SPICE header
#include "C:\naif\cspice32\include\SpiceUsr.h"
#define STEP 3600.0
#define MAXITR 100
#define TIMLEN 51
using namespace std;
SpiceDouble et;
SpiceDouble et1;
SpiceDouble et2;
SpiceChar time_[TIMLEN];
SpiceChar time1[TIMLEN];
SpiceChar time2[TIMLEN];
SpiceChar step_time[TIMLEN];
const float PI = 1 / 3.1415;
const float sb_const = 5.670367e-08; //Stephan-Boltz,an constant
const float moon_T = 271.5; //moon temperature from Planetary Data
Science database
float surf_albedo = 0.37; // moon albedo
float ka_albedo = 0.073; //spacecraft albedo
int main() {
//Load SPICE kernels
furnsh_c("de430.bsp");
furnsh_c("naif0009.tls");
furnsh_c("pck00010.tpc");
//Determing occultation periods
find_sun();
deque<Model_Triangle> SCENE; //model triangles que readed from STL
file
deque<Model_Triangle> SURF; //surface triangles que readed from STL file
float tmp_StefBolz = sb_const*pow(moon_T, 4.0); //temperature flux from
stefan-boltzman law
//MAKE DEQUE OF MODEL TRIANGLES FROM
STL//
ofstream fout1;
fout1.open("out1.txt");
//Read low model triangles STL model
fstream fin("low.txt");
fin.close();
//Make deque of scene triangles
make_scene(SCENE, fin, ka_albedo);
//Read low triangles STL model
fstream fin1("Reduced_surf.txt");
fin1.close();
//Make deque of surface triangles
make_scene(SURF, fin1, surf_albedo);
//Specify epoch of interest to perform calculations
prompt_c("Epoch from? ", 51, time1);
prompt_c("Epoch to? ", 51, time2);
str2et_c(time1, &et1);
str2et_c(time2, &et2);
//Main loop through time
for (int i = 0; i < MAXITR + 1; i++) {
//step time in as ET - seconds pass JAN 1 2000
et = et1 + (i*(et2 - et1) / MAXITR);
//Clear the flux values to preform calculations
for (int i = 0; i < SCENE.size(); i++) {
SCENE[i].sun_reflected_B = 0;
SCENE[i].sun_direct_B = 0;
SCENE[i].moon_temperature_B = 0;
}
for (int i = 0; i < SURF.size(); i++) {
SURF[i].sun_reflected_B = 0;
SURF[i].sun_direct_B = 0;
SURF[i].moon_temperature_B = 0;
}
//Compute direct and reflected fluxes on surf in specified epoch and position
cout << "cmp_fluxes_on_surf(SURF, et)..." << endl;
cmp_fluxes_on_surf(SURF, et);
//sun direct fluxes on SCENE
cout << "Computing direct sun fluxes on model..." << endl;
cmp_direct_flux_on_model(SCENE, et);
//Fluxes from SURF on SCENE
cout << "Computing fluxes on model from surface..." << endl;
cmp_model_flux_from_surf(SCENE, SURF);
//Make deque of box planes from STL files of planes
//then set view factors and compute fluxes
//TOP (should be zero)
deque<Model_Triangle> box_top;
fstream fin6("box_top.txt");
make_scene(box_top, fin6, 0);
fin6.close();
for (int j = 0; j < box_top.size(); j++) {
float alpha = 0;
for (int i = 0; i < SURF.size(); i++){
alpha = compute_SURF_alpha(SURF[i].v3d_normal,
box_top[j].v3d_normal,
Distance(SURF[i], box_top[j]),
&dot_product, &Norm_v3d, box_top[j].Area());
//Flux from surface
box_top[j].sun_reflected_B += alpha*SURF[i].sun_reflected_B;//
*SURF[i].Area() / 100;
box_top[j].moon_temperature_B += alpha*SURF[i].moon_temperature_B;//
*SURF[i].Area() / 100;
}
}
//BOTTOM
deque<Model_Triangle> box_bottom;
fstream fin2("box_bottom.txt");
make_scene(box_bottom, fin2, 0);
fin2.close();
for (int j = 0; j < box_bottom.size(); j++) {
float alpha = 0;
for (int i = 0; i < SURF.size(); i++){
alpha = compute_SURF_alpha(SURF[i].v3d_normal,
box_bottom[j].v3d_normal,
Distance(SURF[i], box_bottom[j]),
&dot_product, &Norm_v3d, box_bottom[j].Area());
//Flux from surface
box_bottom[j].sun_reflected_B += alpha*SURF[i].sun_reflected_B;//
*SURF[i].Area() / 100;
box_bottom[j].moon_temperature_B +=
alpha*SURF[i].moon_temperature_B;// *SURF[i].Area() / 100;
}
}
//FRONT
deque<Model_Triangle> box_front;
fstream fin3("box_front.txt");
make_scene(box_front, fin3, 0);
fin3.close();
for (int j = 0; j < box_front.size(); j++) {
float alpha = 0;
for (int i = 0; i < SURF.size(); i++){
alpha = compute_SURF_alpha(SURF[i].v3d_normal,
box_front[j].v3d_normal,
Distance(SURF[i], box_front[j]),
&dot_product, &Norm_v3d, box_front[j].Area());
//Flux from surface
box_front[j].sun_reflected_B += alpha*SURF[i].sun_reflected_B;//
*SURF[i].Area() / 100;
box_front[j].moon_temperature_B +=
alpha*SURF[i].moon_temperature_B;// *SURF[i].Area() / 100;
}
}
//LEFT
deque<Model_Triangle> box_left;
fstream fin4("box_left.txt");
make_scene(box_left, fin4, 0);
fin4.close();
for (int j = 0; j < box_left.size(); j++) {
float alpha = 0;
for (int i = 0; i < SURF.size(); i++){
alpha = compute_SURF_alpha(SURF[i].v3d_normal,
box_left[j].v3d_normal,
Distance(SURF[i], box_left[j]),
&dot_product, &Norm_v3d, box_left[j].Area());
//radiosity from surface
box_left[j].sun_reflected_B += alpha*SURF[i].sun_reflected_B;//
*SURF[i].Area() / 100;
box_left[j].moon_temperature_B += alpha*SURF[i].moon_temperature_B;//
*SURF[i].Area() / 100;
}
}
//RIGHT
deque<Model_Triangle> box_right;
fstream fin5("box_right.txt");
make_scene(box_right, fin5, 0);
fin5.close();
for (int j = 0; j < box_right.size(); j++) {
float alpha = 0;
for (int i = 0; i < SURF.size(); i++){
alpha = compute_SURF_alpha(SURF[i].v3d_normal,
box_right[j].v3d_normal,
Distance(SURF[i], box_right[j]),
&dot_product, &Norm_v3d, box_right[j].Area());
//Flux from surface
box_right[j].sun_reflected_B += alpha*SURF[i].sun_reflected_B;//
*SURF[i].Area() / 100;
box_right[j].moon_temperature_B +=
alpha*SURF[i].moon_temperature_B;// *SURF[i].Area() / 100;
}
}
//Routine to compute reflected and direct fluxes on box
cout << "cmp_direct_flux_on_box(box_right, et)..." << endl;
cmp_direct_flux_on_box(box_right, et);
cout << endl << endl;
cout << "cmp_direct_flux_on_box(box_left, et)..." << endl;
cmp_direct_flux_on_box(box_left, et);
cout << endl << endl;
cout << "cmp_direct_flux_on_box(box_bottom, et)..." << endl;
cmp_direct_flux_on_box(box_bottom, et);
cout << endl << endl;
cout << "cmp_direct_flux_on_box(box_top, et)..." << endl;
cmp_direct_flux_on_box(box_top, et);
cout << endl << endl;
cout << "cmp_direct_flux_on_box(box_front, et)..." << endl;
cmp_direct_flux_on_box(box_front, et);
cout << endl << endl;
//create I matrix as STL vector to store SCENE elements view factors
vector< vector < float > > reflection_matrix;
for (int i = 0; i < SCENE.size(); i++){
vector<float> row;
reflection_matrix.push_back(row);
for (int j = 0; j < SCENE.size(); j++){
if (i == j){
reflection_matrix[i].push_back(1);
}
else {
reflection_matrix[i].push_back(0);
}
}
}
//Make matrix and solve with zeidel
cout << "Making view factor matrix for model..." << endl;
make_matrix(SCENE, reflection_matrix);
cout << "Computing result fluxes on model with Zeidel method..." << endl;
float columns = SCENE.size();
vector<float> B(SCENE.size(), 0);
zeidel(SCENE, reflection_matrix, B, columns, char_to_float1, converge);
//Set selfreflectin part of fluxes
for (int i = 0; i < SCENE.size(); i++)
SCENE[i].selfreflection_B = B[i];
//Output results in separate files
ofstream b_sum;
b_sum.open("B_sum.txt");
for (int i = 0; i < SCENE.size(); i++) {
b_sum << SCENE[i].sun_direct_B + SCENE[i].sun_reflected_B +
SCENE[i].moon_temperature_B << endl;
}
ofstream b_dir;
b_dir.open("B_direct.txt");
for (int i = 0; i < SCENE.size(); i++) {
b_dir << SCENE[i].sun_direct_B << endl;
}
ofstream b_ref;
b_ref.open("B_reflected.txt");
for (int i = 0; i < SCENE.size(); i++) {
b_ref << SCENE[i].sun_reflected_B << endl;
}
ofstream b_temp;
b_temp.open("B_temperature.txt");
for (int i = 0; i < SCENE.size(); i++) {
b_temp << SCENE[i].moon_temperature_B << endl;
}
b_ref.close();
b_temp.close();
b_sum.close();
b_dir.close();
ofstream b_sum_ref;
b_sum_ref.open("B_sum_with_reflection.txt");
for (int i = 0; i < B.size(); i++)
b_sum_ref << B[i] << endl;
b_sum_ref.close();
cout << "Printing output files..." << endl;
ofstream frout;
frout.open("front_reflected_out.txt", std::ios_base::out | std::ios_base::app);
ofstream fdout;
fdout.open("front_direct_out.txt", std::ios_base::out | std::ios_base::app);
ofstream ftout;
ftout.open("front_temperature_out.txt", std::ios_base::out |
std::ios_base::app);
ofstream trout;
trout.open("top_reflected_out.txt", std::ios_base::out | std::ios_base::app);
ofstream tdout;
tdout.open("top_direct_out.txt", std::ios_base::out | std::ios_base::app);
ofstream ttout;
ttout.open("top_temperature_out.txt", std::ios_base::out | std::ios_base::app);
ofstream lrout;
lrout.open("left_reflected_out.txt", std::ios_base::out | std::ios_base::app);
ofstream ldout;
ldout.open("left_direct_out.txt", std::ios_base::out | std::ios_base::app);
ofstream ltout;
ltout.open("left_temperature_out.txt", std::ios_base::out | std::ios_base::app);
ofstream rrout;
rrout.open("right_reflected_out.txt", std::ios_base::out | std::ios_base::app);
ofstream rdout;
rdout.open("right_direct_out.txt", std::ios_base::out | std::ios_base::app);
ofstream rtout;
rtout.open("right_temperature_out.txt", std::ios_base::out |
std::ios_base::app);
et2utc_c(et, "C", 0, 22, step_time);
//Output incoming fluxes as Wt/m2
//so area has to be 1 m2
//and only orientation matters
int i = 1;
frout << "box_front.sun_reflected_B: | " << box_front[i].sun_reflected_B <<
" | " << step_time << endl;
fdout << "box_front.sun_direct_B: | " << box_front[i].sun_direct_B << " | "
<< step_time << endl;
ftout << "box_front.temperature_B: | " <<
box_front[i].moon_temperature_B << " | " << step_time << endl;
trout << "box_top.sun_reflected_B: | " << box_top[i].sun_reflected_B << " |
" << step_time << endl;
tdout << "box_top.sun_direct_B: | " << box_top[i].sun_direct_B << " | " <<
step_time << endl;
ttout << "box_top.temperature_B: | " << box_top[i].moon_temperature_B
<< " | " << step_time << endl;
lrout << "box_left.sun_reflected_B: | " << box_left[i].sun_reflected_B << " |
" << step_time << endl;
ldout << "box_left.sun_direct_B: | " << box_left[i].sun_direct_B << " | " <<
step_time << endl;
ltout << "box_left.temperature_B: | " << box_left[i].moon_temperature_B
<< " | " << step_time << endl;
rrout << "box_right.sun_reflected_B: | " << box_right[i].sun_reflected_B <<
" | " << step_time << endl;
rdout << "box_right.sun_direct_B: | " << box_right[i].sun_direct_B << " | "
<< step_time << endl;
rtout << "box_right.temperature_B: | " << box_right[i].moon_temperature_B
<< " | " << step_time << endl;
}//end of cycle
return 0;
}
Приложение 2
point.h
#pragma once
#include <vector>
#include <cmath>
//Point object
class Point3d {
public:
std::vector<float> pt;
Point3d(float X = 0, float Y = 0, float Z = 0) :pt() { //default constructor
x = X;
y = Y;
z = Z;
}
Point3d(float _in[3]) :pt() { //intillize from c array
x = _in[0]; y = _in[1]; z = _in[2];
}
Point3d(double _in[3]) :pt() { //intillize from c array
x = _in[0]; y = _in[1]; z = _in[2];
}
Point3d(std::vector<float>& pt_) :pt(pt_) { //itillize from stl vector
x = pt[0];
y = pt[1];
z = pt[2];
}
Point3d & operator=(Point3d& o){ //overload '=' to set vectors
if (this != &o){
x = o.x;
y = o.y;
z = o.z;
}
return *this;
}
float x;
float y;
float z;
};
//vector object
class Vector3d {
public:
std::vector<float> ept;
Vector3d(std::vector<float>& pt_) :ept(pt_) { //stl vector constructor
x = ept[0];
y = ept[1];
z = ept[2];
}
Vector3d(const Point3d& p3d) :ept() { //p3d vector constructor
x = p3d.x;
y = p3d.y;
z = p3d.z;
}
Vector3d(float X = 0, float Y = 0, float Z = 0) : ept() { //float constructor
x = X;
y = Y;
z = Z;
}
Vector3d(double _pt[3]) : ept() { //double constructor
x = _pt[0];
y = _pt[1];
z = _pt[2];
}
Vector3d(float _pt[3]) : ept() { //float constructor
x = _pt[0];
y = _pt[1];
z = _pt[2];
}
Vector3d & operator=(Vector3d& o){ //overload '=' to set vectors
if (this != &o){
x = o.x;
y = o.y;
z = o.z;
}
return *this;
}
Vector3d operator*(Vector3d& vec) { //cross product
return Vector3d((y * vec.z - z * vec.y),
(z * vec.x - x * vec.z),
(x * vec.y - y * vec.x));
}
Vector3d operator-(Vector3d& vec) { //cross product
return Vector3d((x - vec.x),
(y - vec.y),
(z - vec.z));
}
Vector3d operator+(Vector3d& vec) { //cross product
return Vector3d((x + vec.x),
(y + vec.y),
(z + vec.z));
}
float dot(Vector3d& vec) { //dot product
return (x*vec.x + y*vec.y + z*vec.z);
}
float norm() { //norm
return sqrt(x*x + y*y + z*z);
}
void normalize() { //normalize
float tmp_x = x;
float tmp_y = y;
float tmp_z = z;
x = x / sqrt(tmp_x*tmp_x + tmp_y*tmp_y + tmp_z*tmp_z);
y = y / sqrt(tmp_x*tmp_x + tmp_y*tmp_y + tmp_z*tmp_z);
z = z / sqrt(tmp_x*tmp_x + tmp_y*tmp_y + tmp_z*tmp_z);
}
float x;
float y;
float z;
};
Приложение 3
triangle.h
#pragma once
#include "POINT.H"
#include <vector>
//Triangle class to work with.
//Each .STL triangle whraped as a triangle object
//who knowes his verteces, normal, centr, area
class Model_Triangle {
public:
Model_Triangle::Model_Triangle(std::vector < std::vector<float> >& v_);
Model_Triangle::Model_Triangle() : v3d_normal(), vertex1(), vertex2(),
Подобные документы
Внешние тепловые потоки, действующие на космический аппарат. Общие сведения и устройство оптических систем вакуумных установок. Спектры солнечного излучения. Классификация имитаторов солнечного излучения. Физические принципы использования имитаторов.
курсовая работа [747,5 K], добавлен 13.09.2012Особенности вида Земли с Луны. Причины возникновения кратеров (районов с неровным ландшафтом и горными хребтами) на поверхности Луны - падения метеоритов и вулканические извержения. Функция советских автоматических станций "Луна–16", "Луна–20", "Луна–24".
презентация [121,6 K], добавлен 15.09.2010Обзор миссий к точкам либрации. Методы моделирования движения космического аппарата вблизи точек либрации. Моделирование орбитального движения спутника в окрестности первой точки либрации L1 системы Солнце-Земля. Осуществление непрерывной связи.
дипломная работа [2,2 M], добавлен 17.10.2016Составление трехмерных карт поверхности Луны по программе NASA World Wind. Этапы поиска воды на естественном космическом спутнике Земли, алгоритмы обработки информации. База данных информационной справочной системы номенклатуры лунных образований.
курсовая работа [1,6 M], добавлен 17.05.2011Луна в мифологии народов мира. Содержание теорий, объясняющих формирование земного спутника. Строение коры Луны, характеристика ее атмосферы и состав горных пород. Особенности рельефа лунной поверхности, основные фазы Луны и история ее исследования.
реферат [521,3 K], добавлен 21.10.2011Особенности наблюдения моментов контактов, фотографирования серпов, определения границ полос полной тени на местности как способы предвычисления видимого положения Луны на небе. Ознакомление с законом потемнения солнечного диска от середины к краю.
реферат [161,3 K], добавлен 27.07.2010Сущность видимого движения Луны. Солнечные и лунные затмения. Ближайшее к Земле небесное тело и её естественный спутник. Характеристика поверхности Луны, происхождение грунта и сейсмические методы исследования. Взаимосвязь между Луной и приливами.
презентация [924,1 K], добавлен 13.11.2013Анализ баллистических характеристик космического аппарата. Расчет масс служебных систем, элементов топлива. Зона обзора на поверхности Земли и полоса обзора. Изучение системы электроснабжения, обеспечения теплового режима, бортового комплекса управления.
курсовая работа [53,7 K], добавлен 10.07.2012Содержание программы полета космического аппарата. Стадия разработки рабочей документации и изготовления космического аппарата. Задачи управления эксплуатацией ЛК. Программа поддержания ЛК в готовности к применению, структура системы эксплуатации.
контрольная работа [179,5 K], добавлен 15.10.2010Характер и обоснование движения тел солнечной системы. Элементы эллиптической орбиты и их назначение. Особенности движения Земли и Луны. Феномен солнечного затмения, причины и условия его наступления. Специфика лунных затмений и их влияние на Землю.
курсовая работа [4,0 M], добавлен 27.06.2010