项目结构改为动态库、控制台、单元测试
This commit is contained in:
parent
ff7bc13a1a
commit
95b61d7a13
@ -7,4 +7,8 @@
|
||||
<Nullable>enable</Nullable>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="AirTransmission\AirTransmission.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
|
||||
40
air.sln
40
air.sln
@ -1,9 +1,16 @@
|
||||
|
||||
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||
# Visual Studio Version 17
|
||||
VisualStudioVersion = 17.5.002.0
|
||||
VisualStudioVersion = 17.0.31903.59
|
||||
MinimumVisualStudioVersion = 10.0.40219.1
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "air", "air.csproj", "{2A5A314C-58B2-4853-A6CA-F2B17F69A8E5}"
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{SRC_FOLDER_GUID}"
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "tests", "tests", "{TESTS_FOLDER_GUID}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AirTransmissionConsole", "src\AirTransmissionConsole\AirTransmissionConsole.csproj", "{CONSOLE_GUID}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AirTransmission", "src\AirTransmission\AirTransmission.csproj", "{LIB_GUID}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AirTransmission.Tests", "tests\AirTransmission.Tests\AirTransmission.Tests.csproj", "{TESTS_GUID}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
@ -11,15 +18,22 @@ Global
|
||||
Release|Any CPU = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{2A5A314C-58B2-4853-A6CA-F2B17F69A8E5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{2A5A314C-58B2-4853-A6CA-F2B17F69A8E5}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{2A5A314C-58B2-4853-A6CA-F2B17F69A8E5}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{2A5A314C-58B2-4853-A6CA-F2B17F69A8E5}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{CONSOLE_GUID}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{CONSOLE_GUID}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{CONSOLE_GUID}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{CONSOLE_GUID}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{LIB_GUID}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{LIB_GUID}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{LIB_GUID}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{LIB_GUID}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{TESTS_GUID}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{TESTS_GUID}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{TESTS_GUID}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{TESTS_GUID}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
EndGlobalSection
|
||||
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||
SolutionGuid = {16FD379F-2B2B-4334-A010-A5740A406481}
|
||||
GlobalSection(NestedProjects) = preSolution
|
||||
{CONSOLE_GUID} = {SRC_FOLDER_GUID}
|
||||
{LIB_GUID} = {SRC_FOLDER_GUID}
|
||||
{TESTS_GUID} = {TESTS_FOLDER_GUID}
|
||||
EndGlobalSection
|
||||
EndGlobal
|
||||
|
||||
224
docs/API.md
Normal file
224
docs/API.md
Normal file
@ -0,0 +1,224 @@
|
||||
# 大气透过率计算库 API 文档
|
||||
|
||||
## 主要类和接口
|
||||
|
||||
### AtmosphericTransmittanceCalculator
|
||||
|
||||
静态类,提供各种电磁波透过率的计算方法。
|
||||
|
||||
#### 方法
|
||||
|
||||
##### CalcLaser
|
||||
|
||||
```csharp
|
||||
public static double CalcLaser(WeatherCondition weather, double distance)
|
||||
```
|
||||
|
||||
计算激光(1.06μm)在给定天气条件和距离下的大气透过率。
|
||||
|
||||
- 参数:
|
||||
- weather: 天气条件
|
||||
- distance: 传输距离(米)
|
||||
- 返回值:0-1之间的透过率值
|
||||
|
||||
##### CalcLaserWithSmoke
|
||||
|
||||
```csharp
|
||||
public static double CalcLaserWithSmoke(WeatherCondition weather, double distance, double smokeConcentration, double smokeThickness)
|
||||
```
|
||||
|
||||
计算有烟雾条件下的激光透过率。
|
||||
|
||||
- 参数:
|
||||
- weather: 天气条件
|
||||
- distance: 传输距离(米)
|
||||
- smokeConcentration: 烟雾浓度(g/m³)
|
||||
- smokeThickness: 烟雾厚度(米)
|
||||
- 返回值:0-1之间的透过率值
|
||||
|
||||
##### CalcTurbulenceEffect
|
||||
|
||||
```csharp
|
||||
public static double CalcTurbulenceEffect(WeatherCondition weather, double distance)
|
||||
```
|
||||
|
||||
计算湍流效应对激光透过率的影响。
|
||||
|
||||
- 参数:
|
||||
- weather: 天气条件
|
||||
- distance: 传输距离(米)
|
||||
- 返回值:0-1之间的透过率值
|
||||
|
||||
##### CalcIR
|
||||
|
||||
```csharp
|
||||
public static double CalcIR(WeatherCondition weather, double distance)
|
||||
```
|
||||
|
||||
计算红外线(3-12μm)透过率。
|
||||
|
||||
- 参数:
|
||||
- weather: 天气条件
|
||||
- distance: 传输距离(米)
|
||||
- 返回值:0-1之间的透过率值
|
||||
|
||||
##### CalcUV
|
||||
|
||||
```csharp
|
||||
public static double CalcUV(WeatherCondition weather, double distance)
|
||||
```
|
||||
|
||||
计算紫外线(0.2-0.4μm)透过率。
|
||||
|
||||
- 参数:
|
||||
- weather: 天气条件
|
||||
- distance: 传输距离(米)
|
||||
- 返回值:0-1之间的透过率值
|
||||
|
||||
##### CalcMillimeterWave
|
||||
|
||||
```csharp
|
||||
public static double CalcMillimeterWave(WeatherCondition weather, double distance)
|
||||
```
|
||||
|
||||
计算毫米波(94GHz)透过率。
|
||||
|
||||
- 参数:
|
||||
- weather: 天气条件
|
||||
- distance: 传输距离(米)
|
||||
- 返回值:0-1之间的透过率值
|
||||
|
||||
##### CalculateSmokeScreenTransmittance
|
||||
|
||||
```csharp
|
||||
public static double CalculateSmokeScreenTransmittance(double smokeConcentration, double smokeThickness)
|
||||
```
|
||||
|
||||
计算烟幕对电磁波的透过率。
|
||||
|
||||
- 参数:
|
||||
- smokeConcentration: 烟雾浓度(g/m³)
|
||||
- smokeThickness: 烟雾厚度(米)
|
||||
- 返回值:0-1之间的透过率值
|
||||
|
||||
##### CalculateReceivedRadiationSinglePath
|
||||
|
||||
```csharp
|
||||
public static double CalculateReceivedRadiationSinglePath(double transmittance, double targetRadiation, double receiverDistance)
|
||||
```
|
||||
|
||||
计算单程传输后接收到的辐射功率。
|
||||
|
||||
- 参数:
|
||||
- transmittance: 大气透过率
|
||||
- targetRadiation: 目标辐射(W/Sr)
|
||||
- receiverDistance: 接收器距离(米)
|
||||
- 返回值:接收到的辐射功率(W/Sr)
|
||||
|
||||
##### CalculateReceivedRadiation
|
||||
|
||||
```csharp
|
||||
public static double CalculateReceivedRadiation(double transmittance, double laserEnergy, double pulseWidth, double targetDistance, double receiverDistance, double targetReflectivity)
|
||||
```
|
||||
|
||||
计算双程传输后接收到的辐射功率。
|
||||
|
||||
- 参数:
|
||||
- transmittance: 大气透过率
|
||||
- laserEnergy: 激光能量(焦耳)
|
||||
- pulseWidth: 脉冲宽度(纳秒)
|
||||
- targetDistance: 目标距离(米)
|
||||
- receiverDistance: 接收器距离(米)
|
||||
- targetReflectivity: 目标反射率
|
||||
- 返回值:接收到的辐射功率(瓦特)
|
||||
|
||||
### WeatherCondition
|
||||
|
||||
表示大气环境条件的类。
|
||||
|
||||
#### 构造函数
|
||||
|
||||
```csharp
|
||||
public WeatherCondition(
|
||||
WeatherType type,
|
||||
double temperature,
|
||||
double relativeHumidity,
|
||||
double visibility,
|
||||
double? precipitation = null,
|
||||
double co2Concentration = 415)
|
||||
```
|
||||
|
||||
- 参数:
|
||||
- type: 天气类型
|
||||
- temperature: 温度(摄氏度)
|
||||
- relativeHumidity: 相对湿度(0-1)
|
||||
- visibility: 能见度(米)
|
||||
- precipitation: 降水量(mm/h),可选
|
||||
- co2Concentration: 二氧化碳浓度(ppm),默认415
|
||||
|
||||
#### 属性
|
||||
|
||||
- `Type`: 天气类型(WeatherType 枚举)
|
||||
- `Temperature`: 温度(摄氏度)
|
||||
- `RelativeHumidity`: 相对湿度(0-1)
|
||||
- `Visibility`: 能见度(米)
|
||||
- `Precipitation`: 降水量(mm/h)
|
||||
- `CO2Concentration`: 二氧化碳浓度(ppm)
|
||||
|
||||
### WeatherType
|
||||
|
||||
天气类型枚举。
|
||||
|
||||
```csharp
|
||||
public enum WeatherType
|
||||
{
|
||||
晴天, // 晴朗天气
|
||||
雨天, // 雨天
|
||||
雪天, // 雪天
|
||||
雾天, // 雾天
|
||||
沙尘 // 沙尘天气
|
||||
}
|
||||
```
|
||||
|
||||
## 使用示例
|
||||
|
||||
### 基本使用
|
||||
|
||||
```csharp
|
||||
// 创建天气条件
|
||||
var weather = new WeatherCondition(
|
||||
type: WeatherType.晴天,
|
||||
temperature: 20, // 20℃
|
||||
relativeHumidity: 0.45, // 45%
|
||||
visibility: 23000 // 23km
|
||||
);
|
||||
// 计算1000米距离的激光透过率
|
||||
double transmittance = AtmosphericTransmittanceCalculator.CalcLaser(weather, 1000);
|
||||
```
|
||||
|
||||
### 计算有烟雾条件下的透过率
|
||||
|
||||
```csharp
|
||||
// 计算有烟雾条件下的透过率
|
||||
double smokeTransmittance = AtmosphericTransmittanceCalculator.CalcLaserWithSmoke(
|
||||
weather,
|
||||
distance: 1000, // 1000米
|
||||
smokeConcentration: 0.1, // 0.1 g/m³
|
||||
smokeThickness: 100 // 100米
|
||||
);
|
||||
```
|
||||
|
||||
## 注意事项
|
||||
|
||||
1. 所有透过率计算方法返回值范围都在0到1之间
|
||||
2. 距离单位统一使用米(m)
|
||||
3. 温度使用摄氏度(℃)
|
||||
4. 相对湿度使用0-1的小数表示
|
||||
5. 能见度使用米(m)表示
|
||||
6. 降水量使用毫米/小时(mm/h)表示
|
||||
|
||||
## 性能考虑
|
||||
|
||||
- 所有计算方法都是线程安全的
|
||||
- 计算过程中会考虑多种大气效应,包括分子散射、气溶胶散射、大气湍流等
|
||||
- 对于大量计算,建议复用 WeatherCondition 对象以提高性能
|
||||
@ -1,12 +1,16 @@
|
||||
# 大气透过率计算器
|
||||
# 大气透过率计算库
|
||||
|
||||
## 项目简介
|
||||
|
||||
大气透过率计算器是一个用于模拟和计算各种电磁波(包括激光、红外线、毫米波和紫外线)在不同大气条件下透过率的工具。本项目考虑了多种天气因素和大气湍流的影响,为光学和通信系统的设计与分析提供了有力支持。
|
||||
大气透过率计算库是一个用于模拟和计算各种电磁波(包括激光、红外线、毫米波和紫外线)在不同大气条件下透过率的工具。本项目考虑了多种天气因素和大气湍流的影响,为光学和通信系统的设计与分析提供了有力支持。
|
||||
|
||||
## 功能特性
|
||||
|
||||
- 支持多种电磁波类型:激光、红外线、毫米波和紫外线
|
||||
- 激光 (1.06μm)
|
||||
- 红外 (3-12μm)
|
||||
- 紫外 (0.2-0.4μm)
|
||||
- 毫米波 (94GHz)
|
||||
- 考虑多种天气条件:晴天、雨天、雪天、雾天、沙尘天气
|
||||
- 模拟大气湍流对光传输的影响
|
||||
- 计算烟幕对透过率的影响
|
||||
@ -17,26 +21,32 @@
|
||||
|
||||
1. 确保您的系统已安装 .NET 7 或更高版本。
|
||||
2. 克隆此仓库到本地机器: ```
|
||||
git clone https://github.com/11429339/atmospheric-transmittance-model.git ```
|
||||
git clone https://github.com/11429339/atmospheric-transmittance-model.git ```
|
||||
3. 进入项目目录: ```
|
||||
cd atmospheric-transmittance-model ```
|
||||
cd atmospheric-transmittance-model ```
|
||||
4. 编译项目: ```
|
||||
dotnet build ```
|
||||
dotnet build ```
|
||||
|
||||
## 使用方法
|
||||
## 快速开始
|
||||
|
||||
1. 在项目根目录下运行程序: ```
|
||||
dotnet run ```
|
||||
2. 程序将自动执行一系列预设的测试场景,包括不同天气条件和传输距离。
|
||||
3. 查看控制台输出,了解各种条件下的透过率计算结果。
|
||||
```csharp
|
||||
// 创建天气条件
|
||||
var weather = new WeatherCondition(
|
||||
type: WeatherType.晴天, // 天气类型
|
||||
temperature: 20, // 温度(℃)
|
||||
relativeHumidity: 0.45, // 相对湿度
|
||||
visibility: 23000, // 能见度(米)
|
||||
precipitation: 0 // 降雨量(mm/h)
|
||||
);
|
||||
|
||||
### 示例代码
|
||||
|
||||
如果您想在自己的程序中使用此计算器,可以参考Program.cs中的代码
|
||||
// 计算激光透过率
|
||||
double distance = 1000; // 1000米
|
||||
double transmittance = AtmosphericTransmittanceCalculator.CalcLaser(weather, distance);
|
||||
Console.WriteLine($"激光透过率: {transmittance:F4}");
|
||||
```
|
||||
|
||||
## 项目结构
|
||||
|
||||
- `Program.cs`: 主程序入口,包含各种测试方法
|
||||
- `AtmosphericTransmittanceCalculator.cs`: 主要的计算接口
|
||||
- `TransmittanceModel.cs`: 透过率模型的基类
|
||||
- `LaserTransmittanceModel.cs`: 激光透过率模型
|
||||
25
src/AirTransmission/AirTransmission.csproj
Normal file
25
src/AirTransmission/AirTransmission.csproj
Normal file
@ -0,0 +1,25 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net8.0</TargetFramework>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<Nullable>enable</Nullable>
|
||||
<GenerateDocumentationFile>true</GenerateDocumentationFile>
|
||||
<DocumentationFile>AirTransmission.xml</DocumentationFile>
|
||||
<InternalsVisibleTo>AirTransmissionConsole</InternalsVisibleTo>
|
||||
<InternalsVisibleTo>AirTransmission.Tests</InternalsVisibleTo>
|
||||
<NoWarn>$(NoWarn);CS1591;CS1573</NoWarn>
|
||||
<Description>大气透过率计算库</Description>
|
||||
<Authors>田建勇</Authors>
|
||||
<Version>1.0.0</Version>
|
||||
<Copyright>Copyright © 2024</Copyright>
|
||||
</PropertyGroup>
|
||||
|
||||
<PropertyGroup>
|
||||
<DocumentationMode>Selective</DocumentationMode>
|
||||
<DefaultDocumentationFolder>docs</DefaultDocumentationFolder>
|
||||
<DefaultDocumentationInternalsVisibility>false</DefaultDocumentationInternalsVisibility>
|
||||
<DefaultDocumentationPrivatesVisibility>false</DefaultDocumentationPrivatesVisibility>
|
||||
</PropertyGroup>
|
||||
|
||||
</Project>
|
||||
545
src/AirTransmission/AirTransmission.xml
Normal file
545
src/AirTransmission/AirTransmission.xml
Normal file
@ -0,0 +1,545 @@
|
||||
<?xml version="1.0"?>
|
||||
<doc>
|
||||
<assembly>
|
||||
<name>AirTransmission</name>
|
||||
</assembly>
|
||||
<members>
|
||||
<member name="T:AirTransmission.AtmosphericTransmittanceCalculator">
|
||||
<summary>
|
||||
大气透过率计算器
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:AirTransmission.AtmosphericTransmittanceCalculator.CalcLaser(AirTransmission.WeatherCondition,System.Double)">
|
||||
<summary>
|
||||
计算激光在给定天气条件和距离下的大气透过率
|
||||
</summary>
|
||||
<param name="weather">天气条件</param>
|
||||
<param name="distance">传输距离(米)</param>
|
||||
<returns>大气透过率</returns>
|
||||
</member>
|
||||
<member name="M:AirTransmission.AtmosphericTransmittanceCalculator.CalcLaserWithSmoke(AirTransmission.WeatherCondition,System.Double,System.Double,System.Double)">
|
||||
<summary>
|
||||
计算激光在有烟雾条件下的大气透过率
|
||||
</summary>
|
||||
<param name="weather">天气条件</param>
|
||||
<param name="distance">传输距离(米)</param>
|
||||
<param name="smokeConcentration">烟雾浓度</param>
|
||||
<param name="smokeThickness">烟雾厚度(米)</param>
|
||||
<returns>大气透过率</returns>
|
||||
</member>
|
||||
<member name="M:AirTransmission.AtmosphericTransmittanceCalculator.CalcIR(AirTransmission.WeatherCondition,System.Double,System.Double,System.Double)">
|
||||
<summary>
|
||||
计算红外线在给定条件下的大气透过率
|
||||
</summary>
|
||||
<param name="weather">天气条件</param>
|
||||
<param name="distance">传输距离(米)</param>
|
||||
<param name="smokeConcentration">烟雾浓度</param>
|
||||
<param name="smokeThickness">烟雾厚度(米)</param>
|
||||
<returns>大气透过率</returns>
|
||||
</member>
|
||||
<member name="M:AirTransmission.AtmosphericTransmittanceCalculator.CalcMillimeterWave(AirTransmission.WeatherCondition,System.Double,System.Double,System.Double)">
|
||||
<summary>
|
||||
计算毫米波在给定条件下的大气透过率
|
||||
</summary>
|
||||
<param name="weather">天气条件</param>
|
||||
<param name="distance">传输距离(米)</param>
|
||||
<param name="smokeConcentration">烟雾浓度</param>
|
||||
<param name="smokeThickness">烟雾厚度(米)</param>
|
||||
<returns>大气透过率</returns>
|
||||
</member>
|
||||
<member name="M:AirTransmission.AtmosphericTransmittanceCalculator.CalculateReceivedRadiation(System.Double,System.Double,System.Double,System.Double,System.Double,System.Double)">
|
||||
<summary>
|
||||
计算双程传输后接收到的辐射功率
|
||||
</summary>
|
||||
<param name="transmittance">大气透过率</param>
|
||||
<param name="laserEnergy">激光能量(焦耳)</param>
|
||||
<param name="pulseWidth">脉冲宽度(纳秒)</param>
|
||||
<param name="targetDistance">目标距离(米)</param>
|
||||
<param name="receiverDistance">接收器距离(米)</param>
|
||||
<param name="targetReflectivity">目标反射率</param>
|
||||
<returns>接收到的辐射功率(瓦特)</returns>
|
||||
</member>
|
||||
<member name="M:AirTransmission.AtmosphericTransmittanceCalculator.CalculateReceivedRadiationSinglePath(System.Double,System.Double,System.Double)">
|
||||
<summary>
|
||||
计算单程传输后接收到的辐射功率
|
||||
</summary>
|
||||
<param name="transmittance">大气透过率</param>
|
||||
<param name="targetRadiation">目标辐射(W/Sr)</param>
|
||||
<param name="receiverDistance">接收器距离(米)</param>
|
||||
<returns>接收到的辐射功率(W/Sr)</returns>
|
||||
</member>
|
||||
<member name="M:AirTransmission.AtmosphericTransmittanceCalculator.CalcUV(AirTransmission.WeatherCondition,System.Double)">
|
||||
<summary>
|
||||
计算紫外线在给定天气条件和距离下的大气透过率
|
||||
</summary>
|
||||
<param name="weather">天气条件</param>
|
||||
<param name="distance">传输距离(米)</param>
|
||||
<returns>大气透过率</returns>
|
||||
</member>
|
||||
<member name="M:AirTransmission.AtmosphericTransmittanceCalculator.CalcTurbulenceEffect(AirTransmission.WeatherCondition,System.Double)">
|
||||
<summary>
|
||||
计算湍流效应对激光透过率的影响
|
||||
</summary>
|
||||
<param name="weather">天气条件</param>
|
||||
<param name="distance">传输距离(米)</param>
|
||||
<returns>大气透过率</returns>
|
||||
</member>
|
||||
<member name="M:AirTransmission.AtmosphericTransmittanceCalculator.CalculateSmokeScreenTransmittance(System.Double,System.Double)">
|
||||
<summary>
|
||||
计算烟幕对电磁波的透过率
|
||||
</summary>
|
||||
<param name="smokeConcentration">烟幕浓度(g/m³)</param>
|
||||
<param name="smokeThickness">烟幕厚度(米)</param>
|
||||
<returns>烟幕透过率(0到1之间的值)</returns>
|
||||
</member>
|
||||
<member name="T:AirTransmission.AtmosphericTurbulenceModel">
|
||||
<summary>
|
||||
大气湍流模型类,用于计算大气湍流对光传输的影响
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:AirTransmission.AtmosphericTurbulenceModel.CalculateTurbulenceEffect(System.Double,System.Double,System.Double,System.Double)">
|
||||
<summary>
|
||||
计算大气湍流对光传输的综合影响
|
||||
</summary>
|
||||
<param name="distance">传输距离(米)</param>
|
||||
<param name="height">传输高度(米)</param>
|
||||
<param name="windSpeed">风速(米/秒)</param>
|
||||
<param name="C2n">大气折射率结构常数</param>
|
||||
<returns>湍流效应(0到1之间的值,1表示无影响,0表示完全衰减)</returns>
|
||||
</member>
|
||||
<member name="M:AirTransmission.AtmosphericTurbulenceModel.CalculateC2n(System.Double,System.Double)">
|
||||
<summary>
|
||||
使用修改后的 Hufnagel-Valley 模型计算大气折射率结构常数
|
||||
</summary>
|
||||
<param name="height">高度(米)</param>
|
||||
<param name="windSpeed">风速(米/秒)</param>
|
||||
<returns>大气折射率结构常数</returns>
|
||||
</member>
|
||||
<member name="M:AirTransmission.AtmosphericTurbulenceModel.CalculateFriedParameter(System.Double,System.Double)">
|
||||
<summary>
|
||||
计算弗里德参数(Fried parameter)
|
||||
</summary>
|
||||
<param name="C2n">大气折射率结构常数</param>
|
||||
<param name="L">传输距离(米)</param>
|
||||
<returns>弗里德参数(米)</returns>
|
||||
</member>
|
||||
<member name="M:AirTransmission.AtmosphericTurbulenceModel.CalculateScintillationIndex(System.Double,System.Double,System.Double)">
|
||||
<summary>
|
||||
计算闪烁指数(Scintillation Index)
|
||||
</summary>
|
||||
<param name="C2n">大气折射率结构常数</param>
|
||||
<param name="k">波数</param>
|
||||
<param name="L">传输距离(米)</param>
|
||||
<returns>闪烁指数(无量纲)</returns>
|
||||
</member>
|
||||
<member name="M:AirTransmission.AtmosphericTurbulenceModel.CalculateBeamWander(System.Double,System.Double,System.Double)">
|
||||
<summary>
|
||||
计算光束漂移(Beam Wander)
|
||||
</summary>
|
||||
<param name="C2n">大气折射率结构常数</param>
|
||||
<param name="L">传输距离(米)</param>
|
||||
<param name="h">传输高度(米)</param>
|
||||
<returns>光束漂移(弧度)</returns>
|
||||
</member>
|
||||
<member name="M:AirTransmission.AtmosphericTurbulenceModel.CalculateCoherenceLength(System.Double,System.Double)">
|
||||
<summary>
|
||||
计算相干长度(Coherence Length)
|
||||
</summary>
|
||||
<param name="C2n">大气折射率结构常数</param>
|
||||
<param name="L">传输距离(米)</param>
|
||||
<returns>相干长度(米)</returns>
|
||||
</member>
|
||||
<member name="M:AirTransmission.AtmosphericTurbulenceModel.CalculateAngleOfArrival(System.Double,System.Double,System.Double)">
|
||||
<summary>
|
||||
计算到达角(Angle of Arrival)
|
||||
</summary>
|
||||
<param name="C2n">大气折射率结构常数</param>
|
||||
<param name="L">传输距离(米)</param>
|
||||
<param name="D">接收器口径(米)</param>
|
||||
<returns>到达角(弧度)</returns>
|
||||
</member>
|
||||
<member name="M:AirTransmission.AtmosphericTurbulenceModel.CalculateIsoplanatismAngle(System.Double,System.Double)">
|
||||
<summary>
|
||||
计算等晕角(Isoplanatism Angle)
|
||||
</summary>
|
||||
<param name="C2n">大气折射率结构常数</param>
|
||||
<param name="L">传输距离(米)</param>
|
||||
<returns>等晕角(弧度)</returns>
|
||||
</member>
|
||||
<member name="T:AirTransmission.IRTransmittanceModel">
|
||||
<summary>
|
||||
红外线传输模型类,用于计算红外线在大气中的传输特性
|
||||
</summary>
|
||||
</member>
|
||||
<member name="T:AirTransmission.LaserTransmittanceModel">
|
||||
<summary>
|
||||
激光传输模型类,用于计算激光在大气中的传输特性
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:AirTransmission.LaserTransmittanceModel.#ctor(AirTransmission.WeatherCondition)">
|
||||
<summary>
|
||||
激光传输模型类,用于计算激光在大气中的传输特性
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:AirTransmission.LaserTransmittanceModel.LASER_WAVELENGTH">
|
||||
<summary>
|
||||
激光波长(微米)
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:AirTransmission.LaserTransmittanceModel.CalculateTransmittance(System.Double)">
|
||||
<summary>
|
||||
计算给定距离的激光透过率
|
||||
</summary>
|
||||
<param name="distance">传输距离(米)</param>
|
||||
<returns>激光透过率(0到1之间的值)</returns>
|
||||
</member>
|
||||
<member name="M:AirTransmission.LaserTransmittanceModel.CalculateTransmittanceWithTurbulence(System.Double)">
|
||||
<summary>
|
||||
计算考虑湍流效应的激光透过率
|
||||
</summary>
|
||||
<param name="distance">传输距离(米)</param>
|
||||
<returns>考虑湍流效应的激光透过率</returns>
|
||||
</member>
|
||||
<member name="M:AirTransmission.LaserTransmittanceModel.CalculateRainKCoefficient(System.Double)">
|
||||
<summary>
|
||||
计算雨对激光的衰减系数K
|
||||
</summary>
|
||||
<param name="wavelength">波长(微米)</param>
|
||||
<returns>雨衰减系数K</returns>
|
||||
</member>
|
||||
<member name="M:AirTransmission.LaserTransmittanceModel.CalculateRainAlphaCoefficient(System.Double)">
|
||||
<summary>
|
||||
计算雨对激光的衰减系数α
|
||||
</summary>
|
||||
<param name="wavelength">波长(微米)</param>
|
||||
<returns>雨衰减系数α</returns>
|
||||
</member>
|
||||
<member name="M:AirTransmission.LaserTransmittanceModel.CalculateSnowKCoefficient(System.Double)">
|
||||
<summary>
|
||||
计算雪对激光的衰减系数K
|
||||
</summary>
|
||||
<param name="wavelength">波长(微米)</param>
|
||||
<returns>雪衰减系数K</returns>
|
||||
</member>
|
||||
<member name="M:AirTransmission.LaserTransmittanceModel.CalculateSnowAlphaCoefficient(System.Double)">
|
||||
<summary>
|
||||
计算雪对激光的衰减系数α
|
||||
</summary>
|
||||
<param name="wavelength">波长(微米)</param>
|
||||
<returns>雪衰减系数α</returns>
|
||||
</member>
|
||||
<member name="M:AirTransmission.LaserTransmittanceModel.CalculateAttenuationFactor">
|
||||
<summary>
|
||||
计算激光的总衰减因子
|
||||
</summary>
|
||||
<returns>激光总衰减因子</returns>
|
||||
</member>
|
||||
<member name="M:AirTransmission.LaserTransmittanceModel.CalculateMolecularFactor">
|
||||
<summary>
|
||||
计算分子散射因子
|
||||
</summary>
|
||||
<returns>分子散射因子</returns>
|
||||
</member>
|
||||
<member name="M:AirTransmission.LaserTransmittanceModel.CalculateAerosolFactor">
|
||||
<summary>
|
||||
计算气溶胶散射因子
|
||||
</summary>
|
||||
<returns>气溶胶散射因子</returns>
|
||||
</member>
|
||||
<member name="M:AirTransmission.LaserTransmittanceModel.CalculateFogAttenuation(System.Double)">
|
||||
<summary>
|
||||
计算雾对激光的衰减
|
||||
</summary>
|
||||
<param name="pathLength">传输路径长度(米)</param>
|
||||
<returns>雾对激光的衰减</returns>
|
||||
</member>
|
||||
<member name="M:AirTransmission.LaserTransmittanceModel.CalculateTransmittanceWithSmoke(System.Double,System.Double,System.Double)">
|
||||
<summary>
|
||||
计算考虑烟雾的激光透过率
|
||||
</summary>
|
||||
<param name="distance">传输距离(米)</param>
|
||||
<param name="smokeConcentration">烟雾浓度</param>
|
||||
<param name="smokeThickness">烟雾厚度(米)</param>
|
||||
<returns>考虑烟雾的激光透过率</returns>
|
||||
</member>
|
||||
<member name="M:AirTransmission.LaserTransmittanceModel.ApplyTurbulenceEffect(System.Double,System.Double)">
|
||||
<summary>
|
||||
应用湍流效应到透过率
|
||||
</summary>
|
||||
<param name="transmittance">原始透过率</param>
|
||||
<param name="distance">传输距离(米)</param>
|
||||
<returns>考虑湍流效应后的透过率</returns>
|
||||
</member>
|
||||
<member name="T:AirTransmission.MillimeterWaveTransmittanceModel">
|
||||
<summary>
|
||||
毫米波传输模型类,用于计算毫米波在大气中的传输特性
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:AirTransmission.MillimeterWaveTransmittanceModel.MILLIMETER_WAVE_WAVELENGTH">
|
||||
<summary>
|
||||
毫米波波长(毫米)
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:AirTransmission.MillimeterWaveTransmittanceModel.CalculateTransmittance(System.Double)">
|
||||
<summary>
|
||||
计算给定距离的毫米波透过率
|
||||
</summary>
|
||||
<param name="distance">传输距离(米)</param>
|
||||
<returns>毫米波透过率(0到1之间的值)</returns>
|
||||
</member>
|
||||
<member name="M:AirTransmission.MillimeterWaveTransmittanceModel.CalculateMolecularScattering">
|
||||
<summary>
|
||||
计算分子散射系数
|
||||
</summary>
|
||||
<returns>分子散射系数(km^-1)</returns>
|
||||
</member>
|
||||
<member name="M:AirTransmission.MillimeterWaveTransmittanceModel.CalculateAerosolScattering">
|
||||
<summary>
|
||||
计算气溶胶散射系数
|
||||
</summary>
|
||||
<returns>气溶胶散射系数(km^-1)</returns>
|
||||
</member>
|
||||
<member name="M:AirTransmission.MillimeterWaveTransmittanceModel.CalculateWaterVaporAttenuation">
|
||||
<summary>
|
||||
计算水汽吸收系数
|
||||
</summary>
|
||||
<returns>水汽吸收系数(km^-1)</returns>
|
||||
</member>
|
||||
<member name="M:AirTransmission.MillimeterWaveTransmittanceModel.CalculateWaterVaporDensity">
|
||||
<summary>
|
||||
计算水汽密度
|
||||
</summary>
|
||||
<returns>水汽密度(g/m³)</returns>
|
||||
</member>
|
||||
<member name="M:AirTransmission.MillimeterWaveTransmittanceModel.CalculateOxygenAttenuation">
|
||||
<summary>
|
||||
计算氧气吸收系数
|
||||
</summary>
|
||||
<returns>氧气吸收系数(km^-1)</returns>
|
||||
</member>
|
||||
<member name="M:AirTransmission.MillimeterWaveTransmittanceModel.CalculateMillimeterWaveFogAttenuation(System.Double)">
|
||||
<summary>
|
||||
计算雾对毫米波的衰减
|
||||
</summary>
|
||||
<param name="pathLength">传输路径长度(米)</param>
|
||||
<returns>雾衰减</returns>
|
||||
</member>
|
||||
<member name="T:AirTransmission.TransmittanceModel">
|
||||
<summary>
|
||||
大气透过率模型的抽象基类,提供了各种大气条件下的透过率计算方法
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:AirTransmission.TransmittanceModel.#ctor(AirTransmission.WeatherCondition)">
|
||||
<summary>
|
||||
大气透过率模型的抽象基类,提供了各种大气条件下的透过率计算方法
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:AirTransmission.TransmittanceModel.STANDARD_TRANSMITTANCE">
|
||||
<summary>
|
||||
标准大气透过率
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:AirTransmission.TransmittanceModel.STANDARD_VISIBILITY">
|
||||
<summary>
|
||||
标准能见度(公里)
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:AirTransmission.TransmittanceModel.STANDARD_AEROSOL_DENSITY">
|
||||
<summary>
|
||||
标准气溶胶密度(粒子/立方厘米)
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:AirTransmission.TransmittanceModel.weatherCondition">
|
||||
<summary>
|
||||
当前天气条件
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:AirTransmission.TransmittanceModel.Temperature">
|
||||
<summary>
|
||||
温度(开尔文)
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:AirTransmission.TransmittanceModel.Pressure">
|
||||
<summary>
|
||||
大气压力(百帕)
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:AirTransmission.TransmittanceModel.Humidity">
|
||||
<summary>
|
||||
相对湿度(百分比)
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:AirTransmission.TransmittanceModel.AerosolDensity">
|
||||
<summary>
|
||||
气溶胶密度(粒子/立方厘米)
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:AirTransmission.TransmittanceModel.Visibility">
|
||||
<summary>
|
||||
能见度(公里)
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:AirTransmission.TransmittanceModel.IsRaining">
|
||||
<summary>
|
||||
是否下雨
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:AirTransmission.TransmittanceModel.RainRate">
|
||||
<summary>
|
||||
降雨量(毫米/小时)
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:AirTransmission.TransmittanceModel.IsFoggy">
|
||||
<summary>
|
||||
是否有雾
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:AirTransmission.TransmittanceModel.IsDusty">
|
||||
<summary>
|
||||
是否有沙尘
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:AirTransmission.TransmittanceModel.IsSnowing">
|
||||
<summary>
|
||||
是否下雪
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:AirTransmission.TransmittanceModel.SnowRate">
|
||||
<summary>
|
||||
降雪量(毫米/小时)
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:AirTransmission.TransmittanceModel.CO2Concentration">
|
||||
<summary>
|
||||
二氧化碳浓度(ppm)
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:AirTransmission.TransmittanceModel.CalculateTransmittance(System.Double)">
|
||||
<summary>
|
||||
计算给定距离的大气透过率
|
||||
</summary>
|
||||
<param name="distance">传输距离(米)</param>
|
||||
<returns>大气透过率(0到1之间的值)</returns>
|
||||
</member>
|
||||
<member name="M:AirTransmission.TransmittanceModel.CalculateAerosolDensity(System.Double)">
|
||||
<summary>
|
||||
根据能见度计算气溶胶密度
|
||||
</summary>
|
||||
<param name="visibility">能见度(公里)</param>
|
||||
<returns>气溶胶密度(粒子/立方厘米)</returns>
|
||||
</member>
|
||||
<member name="M:AirTransmission.TransmittanceModel.CalculateRainKCoefficient(System.Double)">
|
||||
<summary>
|
||||
计算雨对电磁波的衰减系数K
|
||||
</summary>
|
||||
<param name="wavelength">波长(微米或毫米)</param>
|
||||
<returns>雨衰减系数K</returns>
|
||||
</member>
|
||||
<member name="M:AirTransmission.TransmittanceModel.CalculateRainAlphaCoefficient(System.Double)">
|
||||
<summary>
|
||||
计算雨对电磁波的衰减系数α
|
||||
</summary>
|
||||
<param name="wavelength">波长(微米或毫米)</param>
|
||||
<returns>雨衰减系数α</returns>
|
||||
</member>
|
||||
<member name="M:AirTransmission.TransmittanceModel.CalculateSnowKCoefficient(System.Double)">
|
||||
<summary>
|
||||
计算雪对电磁波的衰减系数K
|
||||
</summary>
|
||||
<param name="wavelength">波长(微米或毫米)</param>
|
||||
<returns>雪衰减系数K</returns>
|
||||
</member>
|
||||
<member name="M:AirTransmission.TransmittanceModel.CalculateSnowAlphaCoefficient(System.Double)">
|
||||
<summary>
|
||||
计算雪对电磁波的衰减系数α
|
||||
</summary>
|
||||
<param name="wavelength">波长(微米或毫米)</param>
|
||||
<returns>雪衰减系数α</returns>
|
||||
</member>
|
||||
<member name="M:AirTransmission.TransmittanceModel.CalculateRainAttenuation(System.Double,System.Double)">
|
||||
<summary>
|
||||
计算雨对电磁波的衰减
|
||||
</summary>
|
||||
<param name="pathLength">传输路径长度(米)</param>
|
||||
<param name="wavelength">波长(微米或毫米)</param>
|
||||
<returns>雨衰减(dB)</returns>
|
||||
</member>
|
||||
<member name="M:AirTransmission.TransmittanceModel.CalculateSnowAttenuation(System.Double,System.Double)">
|
||||
<summary>
|
||||
计算雪对电磁波的衰减
|
||||
</summary>
|
||||
<param name="pathLength">传输路径长度(米)</param>
|
||||
<param name="wavelength">波长(微米或毫米)</param>
|
||||
<returns>雪衰减(dB)</returns>
|
||||
</member>
|
||||
<member name="M:AirTransmission.TransmittanceModel.CalculateDustAttenuation(System.Double)">
|
||||
<summary>
|
||||
计算沙尘对电磁波的衰减
|
||||
</summary>
|
||||
<param name="pathLength">传输路径长度(米)</param>
|
||||
<returns>沙尘衰减(dB)</returns>
|
||||
</member>
|
||||
<member name="M:AirTransmission.TransmittanceModel.CalculateVisibilityFactor">
|
||||
<summary>
|
||||
计算能见度因子
|
||||
</summary>
|
||||
<returns>能见度因子</returns>
|
||||
</member>
|
||||
<member name="T:AirTransmission.UVTransmittanceModel">
|
||||
<summary>
|
||||
紫外线传输模型类,用于计算紫外线在大气中的传输特性
|
||||
</summary>
|
||||
</member>
|
||||
<member name="T:AirTransmission.WeatherCondition">
|
||||
<summary>
|
||||
天气条件类
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:AirTransmission.WeatherCondition.#ctor(AirTransmission.WeatherType,System.Double,System.Double,System.Double,System.Nullable{System.Double},System.Double)">
|
||||
<summary>
|
||||
天气条件类
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:AirTransmission.WeatherCondition.Type">
|
||||
<summary>
|
||||
天气类型
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:AirTransmission.WeatherCondition.Temperature">
|
||||
<summary>
|
||||
温度(摄氏度)
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:AirTransmission.WeatherCondition.RelativeHumidity">
|
||||
<summary>
|
||||
相对湿度(百分比)
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:AirTransmission.WeatherCondition.Visibility">
|
||||
<summary>
|
||||
能见度(公里)
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:AirTransmission.WeatherCondition.Precipitation">
|
||||
<summary>
|
||||
降水量(毫米/小时)
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:AirTransmission.WeatherCondition.CO2Concentration">
|
||||
<summary>
|
||||
二氧化碳浓度(ppm)
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:AirTransmission.WeatherCondition.PrintWeatherInfo(AirTransmission.WeatherCondition)">
|
||||
<summary>
|
||||
打印天气信息
|
||||
</summary>
|
||||
<param name="weather">天气条件</param>
|
||||
</member>
|
||||
<member name="T:AirTransmission.WeatherType">
|
||||
<summary>
|
||||
天气类型枚举
|
||||
</summary>
|
||||
</member>
|
||||
</members>
|
||||
</doc>
|
||||
@ -7,7 +7,7 @@
|
||||
namespace AirTransmission
|
||||
{
|
||||
/// <summary>
|
||||
/// 提供各种大气传输模型的计算方法
|
||||
/// 大气透过率计算器
|
||||
/// </summary>
|
||||
public static class AtmosphericTransmittanceCalculator
|
||||
{
|
||||
@ -49,7 +49,7 @@ namespace AirTransmission
|
||||
{
|
||||
var model = new IRTransmittanceModel(weather);
|
||||
double transmittance = model.CalculateTransmittance(distance);
|
||||
double smokeTransmittance = TransmittanceModel.CalculateSmokeScreenTransmittance(smokeConcentration, smokeThickness);
|
||||
double smokeTransmittance = CalculateSmokeScreenTransmittance(smokeConcentration, smokeThickness);
|
||||
return transmittance * smokeTransmittance;
|
||||
}
|
||||
|
||||
@ -65,12 +65,12 @@ namespace AirTransmission
|
||||
{
|
||||
var model = new MillimeterWaveTransmittanceModel(weather);
|
||||
double transmittance = model.CalculateTransmittance(distance);
|
||||
double smokeTransmittance = TransmittanceModel.CalculateSmokeScreenTransmittance(smokeConcentration, smokeThickness);
|
||||
double smokeTransmittance = CalculateSmokeScreenTransmittance(smokeConcentration, smokeThickness);
|
||||
return transmittance * smokeTransmittance;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 计算接收到的辐射功率
|
||||
/// 计算双程传输后接收到的辐射功率
|
||||
/// </summary>
|
||||
/// <param name="transmittance">大气透过率</param>
|
||||
/// <param name="laserEnergy">激光能量(焦耳)</param>
|
||||
@ -110,7 +110,7 @@ namespace AirTransmission
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 计算单程传输中接收到的辐射功率
|
||||
/// 计算单程传输后接收到的辐射功率
|
||||
/// </summary>
|
||||
/// <param name="transmittance">大气透过率</param>
|
||||
/// <param name="targetRadiation">目标辐射(W/Sr)</param>
|
||||
@ -144,5 +144,42 @@ namespace AirTransmission
|
||||
var model = new UVTransmittanceModel(weather);
|
||||
return model.CalculateTransmittance(distance);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 计算湍流效应对激光透过率的影响
|
||||
/// </summary>
|
||||
/// <param name="weather">天气条件</param>
|
||||
/// <param name="distance">传输距离(米)</param>
|
||||
/// <returns>大气透过率</returns>
|
||||
public static double CalcTurbulenceEffect(WeatherCondition weather, double distance)
|
||||
{
|
||||
var model = new LaserTransmittanceModel(weather);
|
||||
return model.CalculateTransmittanceWithTurbulence(distance);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 计算烟幕对电磁波的透过率
|
||||
/// </summary>
|
||||
/// <param name="smokeConcentration">烟幕浓度(g/m³)</param>
|
||||
/// <param name="smokeThickness">烟幕厚度(米)</param>
|
||||
/// <returns>烟幕透过率(0到1之间的值)</returns>
|
||||
public static double CalculateSmokeScreenTransmittance(double smokeConcentration, double smokeThickness)
|
||||
{
|
||||
if (smokeConcentration <= 0 || smokeThickness <= 0)
|
||||
return 1; // 如果没有烟幕,返回1(无衰减)
|
||||
|
||||
// 烟幕衰减系数(假设值,需要根据实际烟幕特性调整)
|
||||
double smokeAttenuationCoefficient = 0.5;
|
||||
|
||||
// 使用Beer-Lambert定律计算透过率
|
||||
double transmittance = Math.Exp(-smokeAttenuationCoefficient * smokeConcentration * smokeThickness);
|
||||
|
||||
Console.WriteLine($"烟幕透过率计算:");
|
||||
Console.WriteLine($"烟幕浓度: {smokeConcentration:F2} g/m³");
|
||||
Console.WriteLine($"烟幕厚度: {smokeThickness:F2} m");
|
||||
Console.WriteLine($"烟幕透过率: {transmittance:F4}");
|
||||
|
||||
return transmittance;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -9,7 +9,7 @@ namespace AirTransmission
|
||||
/// <summary>
|
||||
/// 大气湍流模型类,用于计算大气湍流对光传输的影响
|
||||
/// </summary>
|
||||
public class AtmosphericTurbulenceModel
|
||||
internal class AtmosphericTurbulenceModel
|
||||
{
|
||||
// 波数,假设波长为1.06微米(常用的激光波长)
|
||||
private const double k = 2 * Math.PI / 1.06e-6;
|
||||
@ -9,7 +9,7 @@ namespace AirTransmission
|
||||
/// <summary>
|
||||
/// 红外线传输模型类,用于计算红外线在大气中的传输特性
|
||||
/// </summary>
|
||||
public class IRTransmittanceModel : TransmittanceModel
|
||||
internal class IRTransmittanceModel : TransmittanceModel
|
||||
{
|
||||
// 光谱分段参数
|
||||
private const double MIN_WAVELENGTH = 3.0; // 红外波段最小波长(微米)
|
||||
@ -9,7 +9,7 @@ namespace AirTransmission
|
||||
/// <summary>
|
||||
/// 激光传输模型类,用于计算激光在大气中的传输特性
|
||||
/// </summary>
|
||||
public class LaserTransmittanceModel(WeatherCondition weather) : TransmittanceModel(weather)
|
||||
internal class LaserTransmittanceModel(WeatherCondition weather) : TransmittanceModel(weather)
|
||||
{
|
||||
/// <summary>
|
||||
/// 激光波长(微米)
|
||||
@ -183,7 +183,7 @@ namespace AirTransmission
|
||||
public double CalculateTransmittanceWithSmoke(double distance, double smokeConcentration, double smokeThickness)
|
||||
{
|
||||
double transmittance = CalculateTransmittance(distance);
|
||||
double smokeTransmittance = CalculateSmokeScreenTransmittance(smokeConcentration, smokeThickness);
|
||||
double smokeTransmittance = AtmosphericTransmittanceCalculator.CalculateSmokeScreenTransmittance(smokeConcentration, smokeThickness);
|
||||
return transmittance * smokeTransmittance;
|
||||
}
|
||||
|
||||
@ -9,7 +9,7 @@ namespace AirTransmission
|
||||
/// <summary>
|
||||
/// 毫米波传输模型类,用于计算毫米波在大气中的传输特性
|
||||
/// </summary>
|
||||
public class MillimeterWaveTransmittanceModel : TransmittanceModel
|
||||
internal class MillimeterWaveTransmittanceModel : TransmittanceModel
|
||||
{
|
||||
/// <summary>
|
||||
/// 毫米波波长(毫米)
|
||||
@ -9,7 +9,7 @@ namespace AirTransmission
|
||||
/// <summary>
|
||||
/// 大气透过率模型的抽象基类,提供了各种大气条件下的透过率计算方法
|
||||
/// </summary>
|
||||
public abstract class TransmittanceModel(WeatherCondition weather)
|
||||
internal abstract class TransmittanceModel(WeatherCondition weather)
|
||||
{
|
||||
// 常量
|
||||
/// <summary>
|
||||
@ -103,7 +103,8 @@ namespace AirTransmission
|
||||
/// </summary>
|
||||
/// <param name="wavelength">波长(微米或毫米)</param>
|
||||
/// <returns>雨衰减系数K</returns>
|
||||
protected abstract double CalculateRainKCoefficient(double wavelength);
|
||||
protected abstract double CalculateRainKCoefficient(double wavelength);
|
||||
|
||||
/// <summary>
|
||||
/// 计算雨对电磁波的衰减系数α
|
||||
/// </summary>
|
||||
@ -206,81 +207,5 @@ namespace AirTransmission
|
||||
|
||||
return factor;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 计算烟幕对电磁波的透过率
|
||||
/// </summary>
|
||||
/// <param name="smokeConcentration">烟幕浓度(g/m³)</param>
|
||||
/// <param name="smokeThickness">烟幕厚度(米)</param>
|
||||
/// <returns>烟幕透过率(0到1之间的值)</returns>
|
||||
public static double CalculateSmokeScreenTransmittance(double smokeConcentration, double smokeThickness)
|
||||
{
|
||||
if (smokeConcentration <= 0 || smokeThickness <= 0)
|
||||
return 1; // 如果没有烟幕,返回1(无衰减)
|
||||
|
||||
// 烟幕衰减系数(假设值,需要根据实际烟幕特性调整)
|
||||
double smokeAttenuationCoefficient = 0.5;
|
||||
|
||||
// 使用Beer-Lambert定律计算透过率
|
||||
double transmittance = Math.Exp(-smokeAttenuationCoefficient * smokeConcentration * smokeThickness);
|
||||
|
||||
Console.WriteLine($"烟幕透过率计算:");
|
||||
Console.WriteLine($"烟幕浓度: {smokeConcentration:F2} g/m³");
|
||||
Console.WriteLine($"烟幕厚度: {smokeThickness:F2} m");
|
||||
Console.WriteLine($"烟幕透过率: {transmittance:F4}");
|
||||
|
||||
return transmittance;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 打印天气信息
|
||||
/// </summary>
|
||||
/// <param name="weather">天气条件</param>
|
||||
public static void PrintWeatherInfo(WeatherCondition weather){
|
||||
Console.WriteLine($"---天气类型: {weather.Type}, 温度: {weather.Temperature}°C, 相对湿度: {weather.RelativeHumidity}%, 能见度: {weather.Visibility}km, 降水量: {weather.Precipitation ?? 0}mm/h");
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 天气类型枚举
|
||||
/// </summary>
|
||||
public enum WeatherType
|
||||
{
|
||||
晴天,
|
||||
雨天,
|
||||
雪天,
|
||||
雾天,
|
||||
沙尘
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 天气条件类
|
||||
/// </summary>
|
||||
public class WeatherCondition(WeatherType type, double temperature, double relativeHumidity, double visibility, double? precipitation = null, double co2Concentration = 415)
|
||||
{
|
||||
/// <summary>
|
||||
/// 天气类型
|
||||
/// </summary>
|
||||
public WeatherType Type { get; set; } = type; // 天气类型
|
||||
/// <summary>
|
||||
/// 温度(摄氏度)
|
||||
/// </summary>
|
||||
public double Temperature { get; set; } = temperature; // 温度
|
||||
/// <summary>
|
||||
/// 相对湿度(百分比)
|
||||
/// </summary>
|
||||
public double RelativeHumidity { get; set; } = relativeHumidity; // 相对湿度
|
||||
/// <summary>
|
||||
/// 能见度(公里)
|
||||
/// </summary>
|
||||
public double Visibility { get; set; } = visibility; // 能见度
|
||||
/// <summary>
|
||||
/// 降水量(毫米/小时)
|
||||
/// </summary>
|
||||
public double? Precipitation { get; set; } = precipitation; // 降水量
|
||||
/// <summary>
|
||||
/// 二氧化碳浓度(ppm)
|
||||
/// </summary>
|
||||
public double CO2Concentration { get; set; } = co2Concentration;
|
||||
}
|
||||
}
|
||||
@ -9,7 +9,7 @@ namespace AirTransmission
|
||||
/// <summary>
|
||||
/// 紫外线传输模型类,用于计算紫外线在大气中的传输特性
|
||||
/// </summary>
|
||||
public class UVTransmittanceModel : TransmittanceModel
|
||||
internal class UVTransmittanceModel : TransmittanceModel
|
||||
{
|
||||
// 光谱分段参数
|
||||
private const double MIN_WAVELENGTH = 0.2; // 紫外波段最小波长(微米)
|
||||
55
src/AirTransmission/WeatherCondition.cs
Normal file
55
src/AirTransmission/WeatherCondition.cs
Normal file
@ -0,0 +1,55 @@
|
||||
using System;
|
||||
|
||||
namespace AirTransmission
|
||||
{
|
||||
/// <summary>
|
||||
/// 天气条件类
|
||||
/// </summary>
|
||||
public class WeatherCondition(WeatherType type, double temperature, double relativeHumidity, double visibility, double? precipitation = null, double co2Concentration = 415)
|
||||
{
|
||||
/// <summary>
|
||||
/// 天气类型
|
||||
/// </summary>
|
||||
public WeatherType Type { get; set; } = type; // 天气类型
|
||||
/// <summary>
|
||||
/// 温度(摄氏度)
|
||||
/// </summary>
|
||||
public double Temperature { get; set; } = temperature; // 温度
|
||||
/// <summary>
|
||||
/// 相对湿度(百分比)
|
||||
/// </summary>
|
||||
public double RelativeHumidity { get; set; } = relativeHumidity; // 相对湿度
|
||||
/// <summary>
|
||||
/// 能见度(公里)
|
||||
/// </summary>
|
||||
public double Visibility { get; set; } = visibility; // 能见度
|
||||
/// <summary>
|
||||
/// 降水量(毫米/小时)
|
||||
/// </summary>
|
||||
public double? Precipitation { get; set; } = precipitation; // 降水量
|
||||
/// <summary>
|
||||
/// 二氧化碳浓度(ppm)
|
||||
/// </summary>
|
||||
public double CO2Concentration { get; set; } = co2Concentration;
|
||||
|
||||
/// <summary>
|
||||
/// 打印天气信息
|
||||
/// </summary>
|
||||
/// <param name="weather">天气条件</param>
|
||||
public static void PrintWeatherInfo(WeatherCondition weather){
|
||||
Console.WriteLine($"---天气类型: {weather.Type}, 温度: {weather.Temperature}°C, 相对湿度: {weather.RelativeHumidity}%, 能见度: {weather.Visibility}km, 降水量: {weather.Precipitation ?? 0}mm/h");
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 天气类型枚举
|
||||
/// </summary>
|
||||
public enum WeatherType
|
||||
{
|
||||
晴天, // 晴朗天气
|
||||
雨天, // 雨天
|
||||
雪天, // 雪天
|
||||
雾天, // 雾天
|
||||
沙尘 // 沙尘
|
||||
}
|
||||
}
|
||||
23
src/AirTransmissionConsole/AirTransmissionConsole.csproj
Normal file
23
src/AirTransmissionConsole/AirTransmissionConsole.csproj
Normal file
@ -0,0 +1,23 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<OutputType>Exe</OutputType>
|
||||
<TargetFramework>net8.0</TargetFramework>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<Nullable>enable</Nullable>
|
||||
<RootNamespace>AirTransmissionConsole</RootNamespace>
|
||||
<AssemblyName>AirTransmissionConsole</AssemblyName>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\AirTransmission\AirTransmission.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
<PropertyGroup>
|
||||
<Description>大气透过率计算程序</Description>
|
||||
<Authors>田建勇</Authors>
|
||||
<Version>1.0.0</Version>
|
||||
<Copyright>Copyright © 2024</Copyright>
|
||||
</PropertyGroup>
|
||||
|
||||
</Project>
|
||||
@ -50,9 +50,6 @@ class Program
|
||||
|
||||
Console.WriteLine("\n不同天气条件下的紫外线透过率测试");
|
||||
TestUVTransmittanceInDifferentWeather();
|
||||
|
||||
Console.WriteLine("\n湍流效应对激光透过率的影响");
|
||||
TestTurbulenceEffect();
|
||||
}
|
||||
|
||||
// 测试不同天气条件下的激光透过率
|
||||
@ -85,10 +82,11 @@ class Program
|
||||
|
||||
// 输出结果
|
||||
Console.WriteLine($"\n[{description}条件下的激光透过率]");
|
||||
TransmittanceModel.PrintWeatherInfo(weatherCondition);
|
||||
WeatherCondition.PrintWeatherInfo(weatherCondition);
|
||||
foreach (var d in distances){
|
||||
double laserTransmittance = AtmosphericTransmittanceCalculator.CalcLaser(weatherCondition, d);
|
||||
Console.WriteLine($"距离:{d}公里, 1.06μm激光透过率为: {laserTransmittance:P2}");
|
||||
double turbulenceEffect = AtmosphericTransmittanceCalculator.CalcTurbulenceEffect(weatherCondition, d);
|
||||
Console.WriteLine($"距离:{d}公里, 1.06μm激光透过率为: {laserTransmittance:P2}, 湍流效应: {turbulenceEffect:P2}");
|
||||
}
|
||||
}
|
||||
|
||||
@ -131,7 +129,7 @@ class Program
|
||||
|
||||
// 输出结果
|
||||
Console.WriteLine($"\n[{description}条件下的红外线透过率]");
|
||||
TransmittanceModel.PrintWeatherInfo(weatherCondition);
|
||||
WeatherCondition.PrintWeatherInfo(weatherCondition);
|
||||
foreach (var d in distances)
|
||||
{
|
||||
double irTransmittance = AtmosphericTransmittanceCalculator.CalcIR(weatherCondition, d);
|
||||
@ -154,7 +152,7 @@ class Program
|
||||
double smokeThickness = 15; // 假设烟幕墙厚度为5米
|
||||
|
||||
// 计算烟幕透过率
|
||||
double smokeScreenTransmittance = TransmittanceModel.CalculateSmokeScreenTransmittance(smokeConcentration, smokeThickness);
|
||||
double smokeScreenTransmittance = AtmosphericTransmittanceCalculator.CalculateSmokeScreenTransmittance(smokeConcentration, smokeThickness);
|
||||
Console.WriteLine($"\n仅考虑烟幕的透过率: {smokeScreenTransmittance:P2}");
|
||||
}
|
||||
|
||||
@ -188,7 +186,7 @@ class Program
|
||||
|
||||
// 输出结果
|
||||
Console.WriteLine($"\n[{description}条件下的毫米波透过率]");
|
||||
TransmittanceModel.PrintWeatherInfo(weatherCondition);
|
||||
WeatherCondition.PrintWeatherInfo(weatherCondition);
|
||||
foreach (var d in distances)
|
||||
{
|
||||
double mmWaveTransmittance = AtmosphericTransmittanceCalculator.CalcMillimeterWave(weatherCondition, d);
|
||||
@ -238,7 +236,7 @@ class Program
|
||||
|
||||
// 输出结果
|
||||
Console.WriteLine($"\n[{description}条件下的紫外线透过率]");
|
||||
TransmittanceModel.PrintWeatherInfo(weatherCondition);
|
||||
WeatherCondition.PrintWeatherInfo(weatherCondition);
|
||||
foreach (var d in distances)
|
||||
{
|
||||
double uvTransmittance = AtmosphericTransmittanceCalculator.CalcUV(weatherCondition, d);
|
||||
@ -246,28 +244,4 @@ class Program
|
||||
}
|
||||
}
|
||||
|
||||
// 测试湍流效应对激光透过率的影响
|
||||
static void TestTurbulenceEffect()
|
||||
{
|
||||
// 创建天气条件
|
||||
var weatherCondition = new WeatherCondition(
|
||||
type: WeatherType.晴天,
|
||||
temperature: 25,
|
||||
relativeHumidity: 60,
|
||||
visibility: 10
|
||||
);
|
||||
|
||||
var laserModel = new LaserTransmittanceModel(weatherCondition);
|
||||
|
||||
double[] distances = [0.1, 0.5, 1, 5, 10]; // 测试不同距离(公里)
|
||||
|
||||
// 输出结果
|
||||
Console.WriteLine("\n[湍流效应对激光透过率的影响]");
|
||||
foreach (var d in distances)
|
||||
{
|
||||
double transmittanceWithoutTurbulence = laserModel.CalculateTransmittance(d);
|
||||
double transmittanceWithTurbulence = laserModel.CalculateTransmittanceWithTurbulence(d);
|
||||
Console.WriteLine($"距离:{d}公里, 无湍流透过率: {transmittanceWithoutTurbulence:P2}, 有湍流透过率: {transmittanceWithTurbulence:P2}");
|
||||
}
|
||||
}
|
||||
}
|
||||
23
tests/AirTransmission.Tests/AirTransmission.Tests.csproj
Normal file
23
tests/AirTransmission.Tests/AirTransmission.Tests.csproj
Normal file
@ -0,0 +1,23 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net8.0</TargetFramework>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<Nullable>enable</Nullable>
|
||||
<IsPackable>false</IsPackable>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.8.0" />
|
||||
<PackageReference Include="xunit" Version="2.6.2" />
|
||||
<PackageReference Include="xunit.runner.visualstudio" Version="2.5.4">
|
||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||
<PrivateAssets>all</PrivateAssets>
|
||||
</PackageReference>
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\..\src\AirTransmission\AirTransmission.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
@ -0,0 +1,29 @@
|
||||
using Xunit;
|
||||
|
||||
namespace AirTransmission.Tests;
|
||||
|
||||
public class AtmosphericTransmittanceCalculatorTests
|
||||
{
|
||||
[Fact]
|
||||
public void CalcLaser_WithValidInput_ReturnsExpectedResult()
|
||||
{
|
||||
// Arrange
|
||||
var weather = new WeatherCondition(
|
||||
WeatherType.晴天, // 天气类型
|
||||
temperature: 20, // 温度(℃)
|
||||
relativeHumidity: 45, // 相对湿度
|
||||
visibility: 10, // 能见度(公里)
|
||||
precipitation: 0 // 降雨量(mm/h)
|
||||
);
|
||||
double distance = 1; // 1公里
|
||||
|
||||
// Act
|
||||
double result = AtmosphericTransmittanceCalculator.CalcLaser(weather, distance);
|
||||
|
||||
Console.WriteLine($"计算得到的透过率为: {result}");
|
||||
|
||||
// Assert
|
||||
Assert.True(result > 0 && result <= 1);
|
||||
Assert.True(result > 0.5); // 在晴朗天气下,1公里距离的透过率应该大于0.5
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user