ThreatSourceLibaray/docs/project/rcs_model_design.md

103 lines
6.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# RCS 模型设计 (`RcsPattern`)
`RcsPattern` 类用于管理目标实体在不同观察角度下的雷达散射截面 (Radar Cross Section, RCS) 数据。它采用一个详细的、基于观察者局部视角的模型来确定RCS值。
## 核心数据结构
- **内部RCS矩阵**: 核心数据存储在一个私有的 `double[,] RcsMatrixData` (6行4列) 中单位为dBsm (分贝平方米)。
- **数据源**: RCS数据通常从TOML配置文件中加载。为此类包含一个公共属性 `public List<List<double>> RcsMatrixDataSource { get; set; }`。TOML解析器如Tomlyn会将配置文件中 `RcsMatrix.Data` 数组映射到此属性。`RcsMatrixData` 则通过按需转换 `RcsMatrixDataSource` 得到。
- **默认值**: 如果数据源未提供或不完整将使用预定义的默认RCS值 (`DEFAULT_RCS_DBSM`)。
## RCS矩阵定义
RCS矩阵按以下方式组织
### 1. 行定义 (主方向)
矩阵的6行分别对应目标在观察者视角的六个主要朝向
- **行 0**: 前 (Front) - 观察者从目标正前方观察。
- **行 1**: 后 (Back) - 观察者从目标正后方观察。
- **行 2**: 左 (Left) - 观察者从目标正左方观察。
- **行 3**: 右 (Right) - 观察者从目标正右方观察。
- **行 4**: 上 (Top) - 观察者从目标正上方观察。
- **行 5**: 下 (Bottom) - 观察者从目标正下方观察。
主方向是根据观察向量的全局俯仰角和方位角确定的。俯仰角大于70度为"上",小于-70度为"下"。其余根据全局方位角相对于目标前进方向划分为前、后、左、右各90度扇区。
### 2. 列定义 (象限)
矩阵的4列代表每个主方向下的四个象限。这些象限是严格根据观察者相对于当前被观察主方向的**局部视角**来划分的。这意味着,无论观察哪个主方向,"左、右、上、下"象限的相对含义是一致的。
**统一象限定义** (从观察者视角看当前主平面)
- **列 0**: 观察者位于当前主方向局部参考系的"右侧"和"上半部分"。
- **列 1**: 观察者位于当前主方向局部参考系的"左侧"和"上半部分"。
- **列 2**: 观察者位于当前主方向局部参考系的"左侧"和"下半部分"。
- **列 3**: 观察者位于当前主方向局部参考系的"右侧"和"下半部分"。
**局部参考轴的确定**:
- **对于侧面 (前、后、左、右)**:
- 局部"上/下"部分:由观察者方向在目标的全局上方向 (`targetUpVectorInTargetFrame`) 的投影决定(正为上,负为下)。
- 局部"左/右"侧:由观察者方向在当前主方向的局部右轴 (`localRight`) 上的投影决定(正为右,负为左)。`localRight` 是根据当前主方向(前、后、左、右)定义的。
- **对于顶面/底面**:
- 局部"上/下"部分 (这里更准确地理解为"前/后"部分):由观察者方向在目标的全局前进方向 (`targetForwardVectorInTargetFrame`) 的投影决定(正为前/上,负为后/下)。
- 局部"左/右"侧:由观察者方向在目标的全局右方向 (`targetRightVectorInTargetFrame`,作为顶/底面的局部右轴) 上的投影决定(正为右,负为左)。
## RCS值查询方法
提供了两种方法来获取RCS值
1. **`GetRcsValueDbSm(Vector3D observerDirectionInTargetFrame, Vector3D targetForwardVectorInTargetFrame, Vector3D targetUpVectorInTargetFrame, Vector3D targetRightVectorInTargetFrame)`**:
* **推荐使用此版本**
* 它接收目标坐标系中的观察向量和目标自身姿态向量。
* 通过计算观察者相对于目标各主方向局部参考轴的精确几何关系来确定RCS矩阵的行和列。
* 提供最精确的、符合局部视角定义的RCS值。
2. **`GetRcsValueDbSm(double azimuthDeg, double elevationDeg)`**:
* 接收全局方位角和俯仰角。
* 此方法使用简化的、基于全局角度的象限确定逻辑。虽然主方向(行)的确定与向量版本一致,但其象限(列)的划分可能与向量版本定义的精确局部视角不完全一致,特别是在处理目标后部等复杂情况时。
* 可作为简化场景或无法提供完整向量信息时的备用。
## TOML 配置示例
以下是如何在TOML配置文件中定义6x4的RCS数据 (位于目标配置文件的 `Properties` 下,例如 `mbt_001.toml`):
```toml
# ... (其他属性) ...
# [Properties.RcsPattern] # Tomlyn 通常会自动处理嵌套结构
# RcsMatrixDataSource = [ # 直接在 EquipmentProperties 中定义 RcsPattern 实例,并通过其 RcsMatrixDataSource 属性填充
# ...
# ]
# 或者,如果 RcsPattern 是 EquipmentProperties 的一个直接可配置的子表:
[Properties.RcsPattern.RcsMatrixDataSource] # 更可能是这样,或直接是 RcsPattern = { RcsMatrixDataSource = [...] } 形式
Data = [
# 行0: 前 (相对于目标前进方向)
# 列 (观察者局部视角): 0(右上), 1(左上), 2(左下), 3(右下)
[-10.0, -11.0, -12.0, -13.0], # 前: [右前半球上方, 左前半球上方, 左前半球下方, 右前半球下方]
# 行1: 后 (相对于目标后退方向)
# 列 (观察者局部视角): 0(右上), 1(左上), 2(左下), 3(右下)
[-10.5, -11.5, -12.5, -13.5], # 后: [右后半球上方, 左后半球上方, 左后半球下方, 右后半球下方]
# 行2: 左 (相对于目标左侧方向)
# 列 (观察者局部视角): 0(右上), 1(左上), 2(左下), 3(右下)
[-15.0, -16.0, -17.0, -18.0], # 左: [目标左侧的右半(偏后)上方, 左半(偏前)上方, 左半(偏前)下方, 右半(偏后)下方]
# 更准确:观察者在目标左侧,其视角中的 右上/左上/左下/右下 象限
# 行3: 右 (相对于目标右侧方向)
# 列 (观察者局部视角): 0(右上), 1(左上), 2(左下), 3(右下)
[-15.5, -16.5, -17.5, -18.5], # 右: [目标右侧的 右上/左上/左下/右下 象限,从观察者视角看]
# 行4: 上 (相对于目标顶面)
# 列 (观察者局部视角): 0(右上), 1(左上), 2(左下), 3(右下)
# 局部上/下 -> 目标全局 前/后
# 局部左/右 -> 目标全局 左/右
[ -5.0, -6.0, -7.0, -8.0], # 上: [目标顶部的全局右前方块, 全局左前方块, 全局左后方块, 全局右后方块]
# 行5: 下 (相对于目标底面)
# 列 (观察者局部视角): 0(右上), 1(左上), 2(左下), 3(右下)
[-20.0, -21.0, -22.0, -23.0] # 下: [目标底部的全局右前方块, 全局左前方块, 全局左后方块, 全局右后方块]
]
```
**注意**: TOML示例中象限的文字描述是为了帮助理解实际填充数据时应严格对应代码中通过 `isLocallyTopQuadrant``isLocallyRightQuadrant` 计算出的逻辑。对于"上"和"下"主方向,其"局部上/下"象限实际对应目标的全局"前/后"。