项目结构改为动态库、控制台、单元测试

This commit is contained in:
Tian jianyong 2024-11-19 13:07:51 +08:00
parent ff7bc13a1a
commit 95b61d7a13
18 changed files with 1037 additions and 149 deletions

View File

@ -7,4 +7,8 @@
<Nullable>enable</Nullable>
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="AirTransmission\AirTransmission.csproj" />
</ItemGroup>
</Project>

40
air.sln
View File

@ -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
View 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 对象以提高性能

View File

@ -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`: 激光透过率模型

View 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>

View 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>

View File

@ -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;
}
}
}

View File

@ -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;

View File

@ -9,7 +9,7 @@ namespace AirTransmission
/// <summary>
/// 红外线传输模型类,用于计算红外线在大气中的传输特性
/// </summary>
public class IRTransmittanceModel : TransmittanceModel
internal class IRTransmittanceModel : TransmittanceModel
{
// 光谱分段参数
private const double MIN_WAVELENGTH = 3.0; // 红外波段最小波长(微米)

View File

@ -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;
}

View File

@ -9,7 +9,7 @@ namespace AirTransmission
/// <summary>
/// 毫米波传输模型类,用于计算毫米波在大气中的传输特性
/// </summary>
public class MillimeterWaveTransmittanceModel : TransmittanceModel
internal class MillimeterWaveTransmittanceModel : TransmittanceModel
{
/// <summary>
/// 毫米波波长(毫米)

View File

@ -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;
}
}

View File

@ -9,7 +9,7 @@ namespace AirTransmission
/// <summary>
/// 紫外线传输模型类,用于计算紫外线在大气中的传输特性
/// </summary>
public class UVTransmittanceModel : TransmittanceModel
internal class UVTransmittanceModel : TransmittanceModel
{
// 光谱分段参数
private const double MIN_WAVELENGTH = 0.2; // 紫外波段最小波长(微米)

View 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
{
, // 晴朗天气
, // 雨天
, // 雪天
, // 雾天
// 沙尘
}
}

View 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>

View File

@ -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}");
}
}
}

View 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>

View File

@ -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
}
}