Архитектурная акустика/Реализация/CPrimarySource::CPrimarySource
CPrimarySource() = default; //1
CPrimarySource(const CPrimarySource&) = default; //2
CPrimarySource(CPrimarySource&&) = default; //3
CPrimarySource(const CInputModel& refModel, const CAMaaS::ISourceObject& refSource); //3
Создают экземпляры класса CPrimarySource.
- Конструктор по умолчанию, создающий неинициализированный источник.
- Конструктор копирования.
- Конструктор перемещения.
- Конструктор, создающий источник на основе его предметно-независимого описания.
- Параметры
refModel Описание модели помещения. refSource Предметно-независимое описание создаваемого источника поля.
Перегрузка 4 конструктора создает источник на основе его предметно-независимого описания при обработке запроса DomainStartSimulation. При этом данные предметной области, указатель на которые возвращается методом ISourceObject::GetDomainData имеют следующий формат.
Предварительная версия 1.
Указатель на число с плавающей точкой двойной точности, задающее интенсивность источника. Интенсивность полагается независимой от направления излучения или частоты.
Предварительная версия 2 (текущая, ветка репозитория: chusov-laptop-pc).
Поле | Идентификатор версии | Пары "идентификатор поля данных - данные"; |
---|---|---|
Размер, байт | 4 | см. ниже |
Идентификатор версии принимает значение version_2_domain_id, равное 0x80000001. Значение обеспечивает обратную совместимость с первой версией, т.к. при интерпретации его как числа IEEE754 получается отрицательное значение, что невозможно для интенсивностей.
Поля данных (второе поле таблицы) задаются целочисленным 4-х байтовым идентификатором типа данных (из перечисления version_2_domain_field_ids) и самими данными, задающими АЧХ и ХН источника, которые определены указанным ниже образом.
При задании характеристик источника следует учитывать, что интенсивность расчитывается из произведения значений АЧХ и ХН для указанных частоты и направления.
Амплитудно-частотная характеристика задается либо в виде таблицы распределения характеристики по частотам, либо в виде математического выражения, заданного функцией с единственным параметром.
Если АЧХ задается таблицей, то содержимое поля определено следующим образом.
Поле | TableAfcId | Чисто строк таблицы | Пары значений "частота-характеристика" |
---|---|---|---|
Размер, байт | 4 | 4 | (Число строк таблицы) |
Первый столбец таблицы содержит целочисленное значение 0x00000102, определяющее табличную АЧХ.
Второй столбец определяет число строк, каждая из которых задает значение характеристики для одной частоты.
Элементы третьего столбца содержат пары "частота-характеристика" чисел с плавающей точкой двойной точности.
Частоты таблицы не обязательно должны соответствовать октавным частотам предметной области (т.е. значениям
. Также не требуется описывать все эти частоты.В случае, если программа запрашивает внетабличное значение
, лежащее между строками и (где ), возвращается значение характеристики на прямой, соединяющей точки и .Если запрашиваемая частота меньше минимальной частоты таблицы, возвращается значение характеристики для минимальной частоты. Аналогично, если запрашиваемая частота больше максимальной частоты таблицы, возвращается значение характеристики для максимальной частоты.
Если таблица пуста, используется равномерная АЧХ, возвращающая единицу для всех частот.
Если АЧХ задается аналитическим выражением, то содержимое поля данных предметной области определено следующим образом.
Поле | ExpressionAfcId | Чисто байт строки | utf-8 строка с математическим выражением |
---|---|---|---|
Размер, байт | 4 | 4 | Число байт строки |
Первый столбец таблицы содержит целочисленное значение 0x00000101, определяющее аналитическую АЧХ.
Второй столбец определяет байтовый размер строки с математическим выражением.
Третий столбец определяет выражение. Выражение должно быть определено одномерной функцией, например F(freq) = (freq-9) / sqrt(1 + pow(freq, 2)). Имя параметра или функции не имеет значения. Подробнее описание синтаксиса: см. Архитектурная акустика/Реализация/Expression.
Характеристика направленности задается либо в виде таблицы распределения характеристики по частотам и углам, либо в виде математического выражения, заданного функцией с тремя параметрами.
Если ХН задается таблицей, то содержимое поля определено следующим образом.
Поле | TablePatternId | Чисто строк таблицы | Четверки значений "частота-азимут-зенит-характеристика" |
---|---|---|---|
Размер, байт | 4 | 4 | (Число строк таблицы) |
Первый столбец таблицы содержит целочисленное значение 0x00000002, определяющее табличную ХН.
Второй столбец определяет число строк, каждая из которых задает значение характеристики для одной частоты и одного направления излучения.
Элементы третьего столбца содержат четверки значений "частота-азимут-зенит-характеристика" чисел с плавающей точкой двойной точности.
При запросе на получение характеристики в некоторой внетабличной точке, характеристика линейно аппроксимируется по соседним ячейкам трехмерной таблицы "частота-азимут-зенит-характеристика" - для частоты, азимута и зенита. Если при этом по частоте происходит выход за пределы таблицы, возвращается ближайшая характеристика (минимальная или максимальная) аналогично табличной АЧХ. Если происходит выход за пределы таблицы по азимуту и/или зениту, производится отображение угла на область
.Например, для таблицы
Частота, | Азимут, | Зенит, | Характеристика |
---|---|---|---|
300 | 0 | 0 | |
0.5 | |||
2000 | 0 | 0 | 0.75 |
0 | |||
0 | 0.1 |
значения характеристики
вычисляются следующим образом:- .
,
.
Отсюда
.- .
.
,
.
Тогда
..
.
.
.
.
.
Отсюда
.Тогда
.Если таблица пуста, используется равномерная АЧХ, возвращающая единицу для всех частот.
Если ХН задается аналитическим выражением, то содержимое поля данных предметной области определено следующим образом.
Поле | ExpressionPatternId | Чисто байт строки | utf-8 строка с математическим выражением |
---|---|---|---|
Размер, байт | 4 | 4 | Число байт строки |
Первый столбец таблицы содержит целочисленное значение 0x00000001, определяющее аналитическую ХН.
Второй столбец определяет байтовый размер строки с математическим выражением.
Третий столбец определяет выражение. Выражение должно быть определено тнрехмерной функцией от линейной частоты, азимута и зенита в радинах, например R(freq,theta, phi) = pow(cos(theta) * sin(phi), 2). Имя параметров не имеет значения, но имеет значение позиция аргументов функции. Если какой-либо параметр не используется, он все равно должен быть указан в списке аргументов функции. Подробнее описание синтаксиса: см. Архитектурная акустика/Реализация/Expression.