Электродинамические модели объектов зависят от геометрии последних. В то же время информация о геометрии содержится в файлах трёхмерной графики. Поскольку перед нами стоят задачи моделирования электромагнитных явлений, а также визуализации, то целесообразно создание совместимых интерфейсов графики и электродинамики. Разработка данных интерфейсов базировалась на следующих принципах:
- независимость от конкретной реализации трёхмерной графики;
- использование в качестве прототипа технологии DirectX.
Первый из этих принципов обеспечивает лёгкую адаптацию к различным реализациям 3D графики (DirectX, OpenGL и т.п.). Использование прототипа позволило в короткий срок разработать самосогласованный интерфейс с удачно выбранными названиями методов, которые совпадают с названиями методов прототипа. В настоящее время создана реализация данных интерфейсов с использованием технологии DirectX.
Диаграмма классов графических интерфейсов представлена на следующем рисунке.

Рисунок 1. Диаграмма классов трёхмерной
графики
Все абстрактные классы (названия этих написаны курсивом) касаются графического отображения. Классы EmVertex и MultiVertex , предназначенные для моделирования электродинамических явлений взаимодействуют с графическими с классами графики (взаимодействие отмечено стрелками). В каждом из классов трёхмерной графики помимо специфичных методов имеются два стандартных.
virtual void SetPointer(void *p);
virtual
void * GetPointer();
Эти два метода реализуют доступ к объектам конкретной реализации графики. Например, в классе D3DFaceDX, являющемся наследником класса ID3DFace есть поле LPDIRECT3DRMFACE f;
которое и предназначено для реализации графики с использованием DirectX, а реализация упомянутых методов выглядит следующим образом.
void D3DFaceDX::SetPointer(void *p)
{
f
= (LPDIRECT3DRMFACE)p;
}
void * D3DFaceDX::GetPointer()
{
return f;
}
Тип void * в данных методах используется для обеспечения переносимости.
Теперь перейдём к описанию интерфейсов каждого из указанных классов.
Прототипом данного класса интерфейс IDirect3DRMFace, используемый в технологии DirectX. Класс предназначен для отображения ограниченной плоским многоугольником поверхности. Он имеет следующие методы:
virtual int GetVertexCount() - данный метод возвращает количество вершин поверхности;
virtual TNT::Vector<double> GetNormal() – данный метод возвращает вектор нормали к поверхности;
virtual TNT::Vector<double> GetVertex(int i) – данный метод возвращает i – ю вершину поверхности ;
virtual TNT::Vector<double> GetColorV() – возвращает цвет элемента в виде четырёхмерного вектора;
virtual void SetColorV(const
TNT::Vector<double> & v) – устанавливает цвет элемента;
Прототипом данного класса интерфейс IDirect3DRMFaceArray, используемый в технологии DirectX. Класс содержит коллекцию элементов поверхности. Он имеет следующие методы:
virtual int GetElement(int index, ID3DFace **face) метод доступа до элемента поверхности, имеющего индекс равный index.
virtual int GetSize() – возвращает количество элементов поверхности;
Прототипом данного класса интерфейс IDirect3DRMFrame, используемый в технологии DirectX. Класс содержит информацию о трехмерном графическом объекте (фрейме) и его положении в пространстве. Он имеет следующие методы взаимодействия с электродинамической моделью.
virtual TNT::Matrix<double> GetOrientation(ID3DFrame * frame) - данный метод возвращает ортогональную матрицу ориентации данного фрейма относительно фрейма frame;
virtual TNT::Vector<double> GetPosition(ID3DFrame * frame) данный метод возвращает трёхмерный вектор положения данного фрейма относительно фрейма frame;
Прототипом данного класса интерфейс IDirect3DRMMeshBuilder, используемый в технологии DirectX. Класс содержит информацию о поверхности трехмерного объекта. Он имеет следующие методы:
virtual void Load(const char* filename) – загрузка объекта из файла;
virtual
int GetFaces(ID3DFaceArray ** faces) – метод доступа до массива элементов поверхности;
Каждый элемент электродинамической модели имеет поле, являющееся указателем на объект типа ID3DFace и метод
void EmVertex::SetFace(ID3DFace * Face)
Данный метод осуществляет присваивание данному полю значение формального параметра Face, а также приводит геометрию элемента электродинамической модели в соответствие с геометрией графического объекта. Кроме того, в электродинамических моделях существуют методы графического отображения электромагнитных явлений. Эти методы используют указанное выше поле.
Мы видим, что данные наследники содержат поля – указатели на соответствующие объекты DirectX . Графическое отображение осуществляется через данные указатели.
В электродинамических моделях возникает необходимость расчёта видимости элементов поверхности излучателем. Геометрический расчёт является очень трудоёмким, и его сложность квадратично возрастает по мере увеличения количества элементов поверхности. Вместе с тем современные видеоплаты осуществляют подобные расчёты в доли секунды. Суть графического расчёта видимости состоит в том, чтобы раскрасить элементы поверхности разными цветами, а затем по составу цветов на полученном изображении определить какие элементы являются видимыми.
Ниже приведены графические иллюстрации электродинамических моделей. Производилось моделирование облучения моделей с разных позиций. Модели отображены в разных ракурсах. Цвета отображения соответствуют амплитудам токов моделей. Красный соответствует минимальному току, фиолетовый – максимальному, промежуточные – остальным цветам радуги, по возрастанию частоты светового излучения.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|