增加注释,生成 API 文档

This commit is contained in:
Tian jianyong 2024-12-30 18:41:04 +08:00
parent 95b61d7a13
commit 305ab5c526
22 changed files with 1116 additions and 60 deletions

7
.gitignore vendored
View File

@ -48,4 +48,9 @@ Thumbs.db
# 其他
*.swp
*.*~
project.lock.json
project.lock.json
# 文档
_site/
_site_pdf/
api/

BIN
api_doc.pdf Normal file

Binary file not shown.

63
docfx.json Normal file
View File

@ -0,0 +1,63 @@
{
"metadata": [
{
"src": [
{
"files": [
"src/**.csproj"
]
}
],
"dest": "api",
"disableGitFeatures": false,
"disableDefaultFilter": false
}
],
"build": {
"content": [
{
"files": [
"api/**.yml",
"api/index.md"
]
},
{
"files": [
"docs/**.md",
"docs/**/toc.yml",
"toc.yml",
"*.md"
]
}
],
"resource": [
{
"files": [
"images/**"
]
}
],
"overwrite": [
{
"files": [
"apidoc/**.md"
],
"exclude": [
"obj/**",
"_site/**"
]
}
],
"dest": "_site",
"globalMetadataFiles": [],
"fileMetadataFiles": [],
"template": [
"default"
],
"postProcessors": [],
"noLangKeyword": false,
"keepFileLink": false,
"cleanupCacheHistory": false,
"disableGitFeatures": false
}
}

28
docfx.pdf.json Normal file
View File

@ -0,0 +1,28 @@
{
"pdf": {
"content": [
{
"files": [
"api/**.yml",
"docs/usage_examples.md"
],
"exclude": [
"**/toc.yml",
"**/toc.md"
]
}
],
"name": "AirTransmission-API-Doc",
"title": "大气传输计算库 API 文档",
"coverPage": {
"title": "大气传输计算库",
"author": "田建勇",
"version": "v1.0.0",
"date": "2024年3月"
},
"wkhtmltopdf": {
"additionalArguments": "--enable-local-file-access"
},
"outputFolder": "_site_pdf"
}
}

43
docs/custom.css Normal file
View File

@ -0,0 +1,43 @@
/* 隐藏目录切换按钮 */
.sideaffix,
.sidetoc,
.toc-filter,
#toc_filter_input,
.toc-toggle,
button[data-toggle="toc"] {
display: none !important;
}
/* 隐藏导航按钮 */
.mobile-hide {
display: none !important;
}
/* 隐藏顶部导航栏 */
.navbar {
display: none !important;
}
/* 隐藏面包屑导航 */
.subnav {
display: none !important;
}
/* 移除文档内容的左边距 */
.article {
margin-left: 0 !important;
}
/* 隐藏页脚 */
.footer {
display: none !important;
}
/* 隐藏所有导航相关元素 */
.nav,
.nav-tabs,
.navigation,
.pull-right,
.toggle-mode {
display: none !important;
}

145
docs/generate_pdf.md Normal file
View File

@ -0,0 +1,145 @@
# 生成 API 文档 PDF 指南
本文档说明如何将 API 文档转换为 PDF 格式。
## 前提条件
1. 安装 DocFX
```bash
dotnet tool install -g docfx
```
2. 安装 wkhtmltopdf
从官方网站下载并安装:<https://wkhtmltopdf.org/downloads.html>
## 生成步骤
1. 首先生成 API 文档的 HTML 文件:
```bash
docfx build docfx.json
```
这会在 `_site` 目录下生成 HTML 文档。
2. 使用 wkhtmltopdf 将 HTML 文件转换为 PDF
```bash
wkhtmltopdf --enable-local-file-access \
_site/api/AirTransmission.html \
_site/api/AirTransmission.WeatherType.html \
_site/api/AirTransmission.WeatherCondition.html \
_site/api/AirTransmission.AtmosphericTransmittanceCalculator.html \
api_doc.pdf
```
## PDF 格式优化选项
如果需要优化 PDF 输出效果,可以添加以下 wkhtmltopdf 参数:
1. 页面大小和方向:
```bash
--page-size A4 --orientation Portrait
```
2. 页边距(单位:毫米):
```bash
--margin-top 20 --margin-bottom 20 --margin-left 20 --margin-right 20
```
3. 添加页眉页脚:
```bash
--header-center "[page]/[topage]" \
--header-line \
--footer-center "大气传输计算库 API 文档" \
--footer-line \
--footer-spacing 10 \
--footer-font-size 8
```
4. 封面和目录:
```bash
cover _site/docs/introduction.html \
toc --toc-header-text "目录"
```
5. 自定义样式:
```bash
--user-style-sheet docs/custom.css
```
自定义样式文件 `custom.css` 的内容:
```css
/* 隐藏目录切换按钮 */
.sideaffix {
display: none !important;
}
/* 隐藏导航按钮 */
.mobile-hide {
display: none !important;
}
/* 隐藏顶部导航栏 */
.navbar {
display: none !important;
}
/* 隐藏面包屑导航 */
.subnav {
display: none !important;
}
/* 移除文档内容的左边距 */
.article {
margin-left: 0 !important;
}
/* 隐藏页脚 */
.footer {
display: none !important;
}
```
完整的优化命令示例:
```bash
wkhtmltopdf \
--enable-local-file-access \
--page-size A4 \
--orientation Portrait \
--margin-top 20 \
--margin-bottom 20 \
--margin-left 20 \
--margin-right 20 \
--header-center "[page]/[topage]" \
--header-line \
--footer-center "大气传输计算库 API 文档" \
--footer-line \
--footer-spacing 10 \
--footer-font-size 8 \
--user-style-sheet docs/custom.css \
cover _site/docs/introduction.html \
toc --toc-header-text "目录" \
_site/docs/usage_examples.html \
_site/api/AirTransmission.html \
_site/api/AirTransmission.WeatherType.html \
_site/api/AirTransmission.WeatherCondition.html \
_site/api/AirTransmission.AtmosphericTransmittanceCalculator.html \
api_doc.pdf
```
## 注意事项
1. 确保所有的 HTML 文件都已经正确生成
2. 如果遇到路径问题,请使用完整的文件路径
3. 如果文档包含中文,确保系统安装了相应的中文字体
4. 生成的 PDF 文件默认保存在当前目录下
5. 封面页不会显示页眉和页脚
6. 自定义样式可以隐藏不需要的 HTML 元素

40
docs/introduction.md Normal file
View File

@ -0,0 +1,40 @@
# 大气传输计算库
## 简介
大气传输计算库AirTransmission是一个用于计算大气传输特性的 .NET 类库。它提供了一系列工具和模型,用于计算不同天气条件下的大气透过率和大气湍流影响。
### 主要功能
1. 大气透过率计算
- 支持多种波长范围(紫外、可见光、红外、毫米波)
- 考虑多种天气条件(晴天、多云、雨天等)
- 计算不同传输距离的影响
2. 大气湍流模型
- 计算大气湍流强度
- 评估湍流对传输的影响
3. 天气条件模型
- 温度、湿度、气压等参数的综合影响
- 能见度和天气类型的影响
### 适用场景
- 激光传输系统设计
- 光电设备性能评估
- 大气光学研究
- 气象影响分析
### 技术特点
- 基于 .NET 8.0 开发
- 支持跨平台运行
- 提供 C# 原生支持
- 通过 C++/CLI 包装器支持 C++ 调用
- 完整的 API 文档和使用示例
### 版本信息
- 版本1.0.0
- 发布日期2024年10月

25
docs/toc.yml Normal file
View File

@ -0,0 +1,25 @@
- name: 使用示例
href: usage_examples.md
- name: 大气透过率计算器
href: api/AirTransmission.AtmosphericTransmittanceCalculator.yml
- name: 天气条件
href: api/AirTransmission.WeatherCondition.yml
- name: 传输模型
items:
- name: 基础模型
href: api/AirTransmission.TransmittanceModel.yml
- name: 激光传输模型
href: api/AirTransmission.LaserTransmittanceModel.yml
- name: 红外传输模型
href: api/AirTransmission.IRTransmittanceModel.yml
- name: 紫外传输模型
href: api/AirTransmission.UVTransmittanceModel.yml
- name: 毫米波传输模型
href: api/AirTransmission.MillimeterWaveTransmittanceModel.yml
- name: 大气湍流模型
href: api/AirTransmission.AtmosphericTurbulenceModel.yml
- name: API 文档
href: api/
homepage: api/AirTransmission.html
- name: PDF 生成指南
href: generate_pdf.md

165
docs/usage_examples.md Normal file
View File

@ -0,0 +1,165 @@
# 使用示例
本文档提供了使用大气传输计算库的 C# 和 C++ 示例代码。
## C# 示例
### 基本使用
```csharp
using AirTransmission;
// 创建天气条件
var weather = new WeatherCondition
{
Temperature = 20, // 温度(摄氏度)
Humidity = 0.65, // 相对湿度0-1
Pressure = 101.325, // 大气压力kPa
Visibility = 10000, // 能见度(米)
WeatherType = WeatherType.Clear // 天气类型
};
// 创建大气透过率计算器
var calculator = new AtmosphericTransmittanceCalculator();
// 计算激光透过率
double wavelength = 1.064; // 波长(微米)
double distance = 1000; // 传输距离(米)
double transmittance = calculator.CalculateTransmittance(wavelength, distance, weather);
Console.WriteLine($"激光透过率: {transmittance:P2}");
```
### 高级用法
```csharp
// 计算不同天气条件下的透过率
var weatherConditions = new[]
{
new WeatherCondition { WeatherType = WeatherType.Clear, Temperature = 20, Humidity = 0.65 },
new WeatherCondition { WeatherType = WeatherType.Cloudy, Temperature = 18, Humidity = 0.8 },
new WeatherCondition { WeatherType = WeatherType.Rain, Temperature = 15, Humidity = 0.95 }
};
var calculator = new AtmosphericTransmittanceCalculator();
double wavelength = 1.064; // 微米
double distance = 1000; // 米
foreach (var weather in weatherConditions)
{
var transmittance = calculator.CalculateTransmittance(wavelength, distance, weather);
Console.WriteLine($"天气: {weather.WeatherType}, 透过率: {transmittance:P2}");
}
// 计算大气湍流影响
var turbulence = calculator.CalculateAtmosphericTurbulence(wavelength, distance, weather);
Console.WriteLine($"大气湍流强度: {turbulence:E2}");
```
## C++ 调用说明
由于 AirTransmission 是 .NET 动态库C++ 程序需要通过 C++/CLI 包装器来调用。
### C++/CLI 包装器使用方法
1. 创建包装器项目(由库作者提供):
```cpp
// AirTransmissionWrapper.h
#pragma once
namespace AirTransmissionWrapper {
public enum class WeatherType {
Clear = 0,
Cloudy = 1,
Rain = 2
};
public ref class WeatherCondition {
public:
property double Temperature;
property double Humidity;
property double Pressure;
property double Visibility;
property WeatherType Type;
};
public ref class Calculator {
public:
Calculator();
double CalculateTransmittance(double wavelength, double distance, WeatherCondition^ weather);
double CalculateAtmosphericTurbulence(double wavelength, double distance, WeatherCondition^ weather);
};
}
```
2. 在 C++ 代码中使用包装器:
```cpp
#include <iostream>
#include "AirTransmissionWrapper.h"
int main() {
using namespace AirTransmissionWrapper;
// 创建天气条件
WeatherCondition^ weather = gcnew WeatherCondition();
weather->Temperature = 20.0; // 温度(摄氏度)
weather->Humidity = 0.65; // 相对湿度0-1
weather->Pressure = 101.325; // 大气压力kPa
weather->Visibility = 10000.0; // 能见度(米)
weather->Type = WeatherType::Clear;
// 创建计算器
Calculator^ calculator = gcnew Calculator();
// 计算透过率
double wavelength = 1.064; // 波长(微米)
double distance = 1000.0; // 传输距离(米)
double transmittance = calculator->CalculateTransmittance(wavelength, distance, weather);
std::cout << "透过率: " << transmittance * 100.0 << "%" << std::endl;
return 0;
}
```
## 项目配置
### C# 项目
1. 在 Visual Studio 中创建新的 .NET 项目
2. 通过 NuGet 包管理器添加 AirTransmission 包:
```bash
dotnet add package AirTransmission
```
### C++ 项目
1. 在 Visual Studio 中创建新的 C++ 项目
2. 项目配置:
- 包含目录:添加 AirTransmissionWrapper.h 所在目录
- 库目录:添加 AirTransmissionWrapper.lib 所在目录
- 链接器输入:添加 AirTransmissionWrapper.lib
3. 确保以下 DLL 在可执行文件的同一目录下:
- AirTransmissionWrapper.dll
- AirTransmission.dll
## 注意事项
1. 所有浮点数输入都使用 double 类型
2. 波长单位为微米μm
3. 距离单位为米m
4. 温度单位为摄氏度(℃)
5. 压力单位为千帕kPa
6. 相对湿度范围为 0-1
7. 确保输入参数在合理范围内:
- 波长0.2-20 μm
- 距离:> 0 m
- 温度:-40 到 +60 ℃
- 相对湿度0-1
- 压力80-120 kPa
8. C++ 调用注意事项:
- 使用 `^` 符号声明托管对象
- 使用 `gcnew` 创建托管对象
- 包装器类中的所有对象都需要使用托管引用

10
filterConfig.yml Normal file
View File

@ -0,0 +1,10 @@
apiRules:
- include:
uidRegex: ^AirTransmission
type: Namespace
- include:
uidRegex: ^AirTransmission\..*
type: Type
- include:
uidRegex: ^AirTransmission\..*
type: Member

0
log.txt Normal file
View File

View File

@ -6,8 +6,16 @@
<members>
<member name="T:AirTransmission.AtmosphericTransmittanceCalculator">
<summary>
大气透过率计算器
大气透过率计算器,提供各种电磁波在大气中传输的透过率计算方法
</summary>
<remarks>
支持以下电磁波类型的透过率计算:
- 激光(包含湍流效应)
- 红外线
- 紫外线
- 毫米波
可以处理各种天气条件和烟雾环境
</remarks>
</member>
<member name="M:AirTransmission.AtmosphericTransmittanceCalculator.CalcLaser(AirTransmission.WeatherCondition,System.Double)">
<summary>
@ -96,6 +104,21 @@
<summary>
大气湍流模型类,用于计算大气湍流对光传输的影响
</summary>
<remarks>
主要功能:
- 计算大气折射率结构常数
- 计算湍流引起的光束抖动
- 计算闪烁指数
- 评估湍流对光传输的综合影响
</remarks>
</member>
<member name="F:AirTransmission.AtmosphericTurbulenceModel.k">
<summary>
波数常量单位m^-1
</summary>
<remarks>
基于1.06微米波长常用的Nd:YAG激光器波长计算k = 2π/λ
</remarks>
</member>
<member name="M:AirTransmission.AtmosphericTurbulenceModel.CalculateTurbulenceEffect(System.Double,System.Double,System.Double,System.Double)">
<summary>
@ -168,37 +191,174 @@
</member>
<member name="T:AirTransmission.IRTransmittanceModel">
<summary>
红外线传输模型类,用于计算红外线在大气中的传输特性
红外线透过率计算模型,用于计算红外线在大气中的传输特性
</summary>
<remarks>
主要功能:
- 计算红外线在不同天气条件下的透过率
- 使用光谱模型法进行计算
- 考虑大气分子吸收主要是水汽和CO2
- 计算各种天气条件(雨、雪、雾、沙尘)的衰减效应
</remarks>
</member>
<member name="F:AirTransmission.IRTransmittanceModel.MIN_WAVELENGTH">
<summary>
红外波段最小波长,单位:微米
</summary>
</member>
<member name="F:AirTransmission.IRTransmittanceModel.MAX_WAVELENGTH">
<summary>
红外波段最大波长,单位:微米
</summary>
</member>
<member name="F:AirTransmission.IRTransmittanceModel.SPECTRAL_BANDS">
<summary>
光谱分段数
</summary>
</member>
<member name="F:AirTransmission.IRTransmittanceModel.IR_WAVELENGTH">
<summary>
主要计算波长,单位:微米
</summary>
<remarks>
选择10μm作为主要计算波长因为这是大气窗口区
</remarks>
</member>
<member name="M:AirTransmission.IRTransmittanceModel.CalculateTransmittance(System.Double)">
<summary>
计算给定距离的红外线透过率
</summary>
<param name="distance">传输距离,单位:米</param>
<returns>红外线透过率范围0-1</returns>
<remarks>
计算过程:
1. 将光谱分为多个波段
2. 对每个波段计算衰减
3. 考虑天气条件的影响
4. 综合得到最终透过率
</remarks>
</member>
<member name="M:AirTransmission.IRTransmittanceModel.CalculateBandAttenuation(System.Double)">
<summary>
计算特定波长的波段衰减
</summary>
<param name="wavelength">波长,单位:微米</param>
<returns>波段衰减系数单位km^-1</returns>
<remarks>
包含三种衰减机制:
- 瑞利散射Rayleigh散射
- 米氏散射Mie散射
- 分子吸收
</remarks>
</member>
<member name="M:AirTransmission.IRTransmittanceModel.CalculateRayleighScattering(System.Double)">
<summary>
计算瑞利散射系数
</summary>
<param name="wavelength">波长,单位:微米</param>
<returns>瑞利散射系数单位km^-1</returns>
<remarks>
使用改进的瑞利散射公式,考虑温度和压力的影响
</remarks>
</member>
<member name="M:AirTransmission.IRTransmittanceModel.CalculateMieScattering(System.Double)">
<summary>
计算米氏散射系数
</summary>
<param name="wavelength">波长,单位:微米</param>
<returns>米氏散射系数单位km^-1</returns>
<remarks>
基于能见度和气溶胶密度计算米氏散射
</remarks>
</member>
<member name="M:AirTransmission.IRTransmittanceModel.CalculateMolecularAbsorption(System.Double)">
<summary>
计算分子吸收系数
</summary>
<param name="wavelength">波长,单位:微米</param>
<returns>分子吸收系数单位km^-1</returns>
<remarks>
主要考虑水汽和CO2的吸收
</remarks>
</member>
<member name="M:AirTransmission.IRTransmittanceModel.GetSpectralWeight(System.Double)">
<summary>
获取特定波长的光谱权重
</summary>
<param name="wavelength">波长,单位:微米</param>
<returns>光谱权重范围0-1</returns>
<remarks>
根据黑体辐射理论计算光谱权重
</remarks>
</member>
<member name="M:AirTransmission.IRTransmittanceModel.CalculateWeatherEffect(System.Double)">
<summary>
计算天气效应对透过率的影响
</summary>
<param name="distance">传输距离,单位:米</param>
<returns>天气影响因子范围0-1</returns>
<remarks>
综合考虑:
- 降水(雨、雪)的影响
- 雾的衰减效应
- 沙尘的影响
</remarks>
</member>
<member name="T:AirTransmission.LaserTransmittanceModel">
<summary>
激光传输模型类,用于计算激光在大气中的传输特性
激光透过率计算模型,用于计算激光在大气中的传输特性
</summary>
<remarks>
主要功能:
- 计算激光在不同天气条件下的透过率
- 考虑大气湍流效应
- 处理烟雾对激光传输的影响
- 计算各种天气条件(雨、雪、雾、沙尘)的衰减效应
</remarks>
</member>
<member name="M:AirTransmission.LaserTransmittanceModel.#ctor(AirTransmission.WeatherCondition)">
<summary>
激光传输模型类,用于计算激光在大气中的传输特性
激光透过率计算模型,用于计算激光在大气中的传输特性
</summary>
<remarks>
主要功能:
- 计算激光在不同天气条件下的透过率
- 考虑大气湍流效应
- 处理烟雾对激光传输的影响
- 计算各种天气条件(雨、雪、雾、沙尘)的衰减效应
</remarks>
</member>
<member name="F:AirTransmission.LaserTransmittanceModel.LASER_WAVELENGTH">
<summary>
激光波长(微米)
激光波长常量,单位:微米
</summary>
<remarks>
默认使用1.06μm波长对应Nd:YAG激光器的基频输出
</remarks>
</member>
<member name="M:AirTransmission.LaserTransmittanceModel.CalculateTransmittance(System.Double)">
<summary>
计算给定距离的激光透过率
</summary>
<param name="distance">传输距离(米)</param>
<returns>激光透过率0到1之间的值</returns>
<param name="distance">传输距离,单位:米</param>
<returns>激光透过率范围0-1</returns>
<remarks>
计算过程考虑:
- 分子散射和吸收
- 气溶胶散射
- 降水(雨、雪)衰减
- 雾和沙尘的影响
</remarks>
</member>
<member name="M:AirTransmission.LaserTransmittanceModel.CalculateTransmittanceWithTurbulence(System.Double)">
<summary>
计算考虑湍流效应的激光透过率
</summary>
<param name="distance">传输距离(米)</param>
<returns>考虑湍流效应的激光透过率</returns>
<param name="distance">传输距离,单位:米</param>
<returns>考虑湍流效应后的透过率范围0-1</returns>
<remarks>
使用大气湍流模型计算湍流对激光传输的影响
</remarks>
</member>
<member name="M:AirTransmission.LaserTransmittanceModel.CalculateRainKCoefficient(System.Double)">
<summary>
@ -272,26 +432,48 @@
</member>
<member name="T:AirTransmission.MillimeterWaveTransmittanceModel">
<summary>
毫米波传输模型类,用于计算毫米波在大气中的传输特性
毫米波透过率计算模型,用于计算毫米波在大气中的传输特性
</summary>
<remarks>
主要功能:
- 计算毫米波在不同天气条件下的透过率
- 考虑大气分子散射和吸收
- 处理水汽和氧气的吸收
- 计算各种天气条件(雨、雪、雾、沙尘)的衰减效应
</remarks>
</member>
<member name="F:AirTransmission.MillimeterWaveTransmittanceModel.MILLIMETER_WAVE_WAVELENGTH">
<summary>
毫米波波长(毫米)
毫米波波长常量,单位:毫米
</summary>
<remarks>
默认使用3.19mm波长对应94GHz频率
该频率是毫米波雷达常用工作频率
</remarks>
</member>
<member name="M:AirTransmission.MillimeterWaveTransmittanceModel.CalculateTransmittance(System.Double)">
<summary>
计算给定距离的毫米波透过率
</summary>
<param name="distance">传输距离(米)</param>
<returns>毫米波透过率0到1之间的值</returns>
<param name="distance">传输距离,单位:米</param>
<returns>毫米波透过率范围0-1</returns>
<remarks>
计算过程考虑:
- 分子散射和吸收
- 水汽吸收
- 氧气吸收
- 降水(雨、雪)衰减
- 雾和沙尘的影响
</remarks>
</member>
<member name="M:AirTransmission.MillimeterWaveTransmittanceModel.CalculateMolecularScattering">
<summary>
计算分子散射系数
</summary>
<returns>分子散射系数km^-1</returns>
<returns>分子散射系数单位km^-1</returns>
<remarks>
使用修正的瑞利散射公式,考虑温度和压力的影响
</remarks>
</member>
<member name="M:AirTransmission.MillimeterWaveTransmittanceModel.CalculateAerosolScattering">
<summary>
@ -326,38 +508,58 @@
</member>
<member name="T:AirTransmission.TransmittanceModel">
<summary>
大气透过率模型的抽象基类,提供了各种大气条件下的透过率计算方法
大气透过率计算的基础模型类,提供了各种大气条件下的透过率计算方法
</summary>
<remarks>
包含以下主要衰减机制的计算:
- 分子散射和吸收
- 气溶胶散射和吸收
- 降水(雨、雪)衰减
- 沙尘和雾的衰减
</remarks>
</member>
<member name="M:AirTransmission.TransmittanceModel.#ctor(AirTransmission.WeatherCondition)">
<summary>
大气透过率模型的抽象基类,提供了各种大气条件下的透过率计算方法
大气透过率计算的基础模型类,提供了各种大气条件下的透过率计算方法
</summary>
<remarks>
包含以下主要衰减机制的计算:
- 分子散射和吸收
- 气溶胶散射和吸收
- 降水(雨、雪)衰减
- 沙尘和雾的衰减
</remarks>
</member>
<member name="F:AirTransmission.TransmittanceModel.STANDARD_TRANSMITTANCE">
<summary>
标准大气透过率
标准大气透过率常量
</summary>
<remarks>
在标准大气条件下23km能见度1013.25hPa气压20℃温度的透过率值
</remarks>
</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>
<remarks>
由摄氏度转换而来K = ℃ + 273.15
</remarks>
</member>
<member name="P:AirTransmission.TransmittanceModel.Pressure">
<summary>
@ -487,18 +689,92 @@
</member>
<member name="T:AirTransmission.UVTransmittanceModel">
<summary>
紫外线传输模型类,用于计算紫外线在大气中的传输特性
紫外线透过率计算模型,用于计算紫外线在大气中的传输特性
</summary>
<remarks>
主要功能:
- 计算紫外线在不同天气条件下的透过率
- 使用光谱模型法进行计算
- 考虑臭氧层吸收
- 计算各种天气条件(雨、雪、雾、沙尘)的衰减效应
</remarks>
</member>
<member name="F:AirTransmission.UVTransmittanceModel.MIN_WAVELENGTH">
<summary>
紫外波段最小波长,单位:微米
</summary>
</member>
<member name="F:AirTransmission.UVTransmittanceModel.MAX_WAVELENGTH">
<summary>
紫外波段最大波长,单位:微米
</summary>
</member>
<member name="F:AirTransmission.UVTransmittanceModel.SPECTRAL_BANDS">
<summary>
光谱分段数
</summary>
</member>
<member name="F:AirTransmission.UVTransmittanceModel.UV_WAVELENGTH">
<summary>
主要计算波长,单位:微米
</summary>
<remarks>
选择0.308μm作为主要计算波长这是XeCl准分子激光器的输出波长
</remarks>
</member>
<member name="M:AirTransmission.UVTransmittanceModel.CalculateTransmittance(System.Double)">
<summary>
计算给定距离的紫外线透过率
</summary>
<param name="distance">传输距离,单位:米</param>
<returns>紫外线透过率范围0-1</returns>
<remarks>
计算过程:
1. 将光谱分为多个波段
2. 对每个波段计算衰减
3. 考虑天气条件的影响
4. 综合得到最终透过率
</remarks>
</member>
<member name="T:AirTransmission.WeatherCondition">
<summary>
天气条件类
天气条件类,用于描述大气传输计算所需的天气参数
</summary>
<remarks>
包含以下主要天气参数:
- 天气类型(晴天、雨天、雪天等)
- 温度
- 相对湿度
- 能见度
- 降水量
- CO2浓度
</remarks>
<param name="type">天气类型</param>
<param name="temperature">温度(摄氏度)</param>
<param name="relativeHumidity">相对湿度(百分比)</param>
<param name="visibility">能见度(公里)</param>
<param name="precipitation">降水量(毫米/小时),可选</param>
<param name="co2Concentration">二氧化碳浓度ppm默认415ppm</param>
</member>
<member name="M:AirTransmission.WeatherCondition.#ctor(AirTransmission.WeatherType,System.Double,System.Double,System.Double,System.Nullable{System.Double},System.Double)">
<summary>
天气条件类
天气条件类,用于描述大气传输计算所需的天气参数
</summary>
<remarks>
包含以下主要天气参数:
- 天气类型(晴天、雨天、雪天等)
- 温度
- 相对湿度
- 能见度
- 降水量
- CO2浓度
</remarks>
<param name="type">天气类型</param>
<param name="temperature">温度(摄氏度)</param>
<param name="relativeHumidity">相对湿度(百分比)</param>
<param name="visibility">能见度(公里)</param>
<param name="precipitation">降水量(毫米/小时),可选</param>
<param name="co2Concentration">二氧化碳浓度ppm默认415ppm</param>
</member>
<member name="P:AirTransmission.WeatherCondition.Type">
<summary>
@ -534,12 +810,41 @@
<summary>
打印天气信息
</summary>
<param name="weather">天气条件</param>
<param name="weather">天气条件对象</param>
<remarks>
输出格式:
天气类型: [类型], 温度: [温度]°C, 相对湿度: [湿度]%, 能见度: [能见度]km, 降水量: [降水量]mm/h
</remarks>
</member>
<member name="T:AirTransmission.WeatherType">
<summary>
天气类型枚举
</summary>
</member>
<member name="F:AirTransmission.WeatherType.晴天">
<summary>
晴朗天气
</summary>
</member>
<member name="F:AirTransmission.WeatherType.雨天">
<summary>
雨天
</summary>
</member>
<member name="F:AirTransmission.WeatherType.雪天">
<summary>
雪天
</summary>
</member>
<member name="F:AirTransmission.WeatherType.雾天">
<summary>
雾天
</summary>
</member>
<member name="F:AirTransmission.WeatherType.沙尘">
<summary>
沙尘天气
</summary>
</member>
</members>
</doc>

View File

@ -7,8 +7,16 @@
namespace AirTransmission
{
/// <summary>
/// 大气透过率计算器
/// 大气透过率计算器,提供各种电磁波在大气中传输的透过率计算方法
/// </summary>
/// <remarks>
/// 支持以下电磁波类型的透过率计算:
/// - 激光(包含湍流效应)
/// - 红外线
/// - 紫外线
/// - 毫米波
/// 可以处理各种天气条件和烟雾环境
/// </remarks>
public static class AtmosphericTransmittanceCalculator
{
/// <summary>

View File

@ -9,9 +9,21 @@ namespace AirTransmission
/// <summary>
/// 大气湍流模型类,用于计算大气湍流对光传输的影响
/// </summary>
/// <remarks>
/// 主要功能:
/// - 计算大气折射率结构常数
/// - 计算湍流引起的光束抖动
/// - 计算闪烁指数
/// - 评估湍流对光传输的综合影响
/// </remarks>
internal class AtmosphericTurbulenceModel
{
// 波数假设波长为1.06微米(常用的激光波长)
/// <summary>
/// 波数常量单位m^-1
/// </summary>
/// <remarks>
/// 基于1.06微米波长常用的Nd:YAG激光器波长计算k = 2π/λ
/// </remarks>
private const double k = 2 * Math.PI / 1.06e-6;
/// <summary>

View File

@ -7,18 +7,51 @@
namespace AirTransmission
{
/// <summary>
/// 红外线传输模型类,用于计算红外线在大气中的传输特性
/// 红外线透过率计算模型,用于计算红外线在大气中的传输特性
/// </summary>
/// <remarks>
/// 主要功能:
/// - 计算红外线在不同天气条件下的透过率
/// - 使用光谱模型法进行计算
/// - 考虑大气分子吸收主要是水汽和CO2
/// - 计算各种天气条件(雨、雪、雾、沙尘)的衰减效应
/// </remarks>
internal class IRTransmittanceModel : TransmittanceModel
{
// 光谱分段参数
/// <summary>
/// 红外波段最小波长,单位:微米
/// </summary>
private const double MIN_WAVELENGTH = 3.0; // 红外波段最小波长(微米)
/// <summary>
/// 红外波段最大波长,单位:微米
/// </summary>
private const double MAX_WAVELENGTH = 12.0; // 红外波段最大波长(微米)
/// <summary>
/// 光谱分段数
/// </summary>
private const int SPECTRAL_BANDS = 100; // 光谱分段数
/// <summary>
/// 主要计算波长,单位:微米
/// </summary>
/// <remarks>
/// 选择10μm作为主要计算波长因为这是大气窗口区
/// </remarks>
private const double IR_WAVELENGTH = 10.0; // 主要计算波长(微米)
public IRTransmittanceModel(WeatherCondition weather) : base(weather) { }
/// <summary>
/// 计算给定距离的红外线透过率
/// </summary>
/// <param name="distance">传输距离,单位:米</param>
/// <returns>红外线透过率范围0-1</returns>
/// <remarks>
/// 计算过程:
/// 1. 将光谱分为多个波段
/// 2. 对每个波段计算衰减
/// 3. 考虑天气条件的影响
/// 4. 综合得到最终透过率
/// </remarks>
public override double CalculateTransmittance(double distance)
{
// 将距离转换为千米
@ -47,6 +80,17 @@ namespace AirTransmission
return Math.Max(0, Math.Min(1, finalTransmittance));
}
/// <summary>
/// 计算特定波长的波段衰减
/// </summary>
/// <param name="wavelength">波长,单位:微米</param>
/// <returns>波段衰减系数单位km^-1</returns>
/// <remarks>
/// 包含三种衰减机制:
/// - 瑞利散射Rayleigh散射
/// - 米氏散射Mie散射
/// - 分子吸收
/// </remarks>
private double CalculateBandAttenuation(double wavelength)
{
// 进一步增加衰减系数
@ -57,6 +101,14 @@ namespace AirTransmission
return rayleighScattering + mieScattering + molecularAbsorption;
}
/// <summary>
/// 计算瑞利散射系数
/// </summary>
/// <param name="wavelength">波长,单位:微米</param>
/// <returns>瑞利散射系数单位km^-1</returns>
/// <remarks>
/// 使用改进的瑞利散射公式,考虑温度和压力的影响
/// </remarks>
private double CalculateRayleighScattering(double wavelength)
{
// Rayleigh散射系数计算km^-1
@ -65,6 +117,14 @@ namespace AirTransmission
return 0.02735 * Math.Pow(wavelengthMicrons, -4.08) * (Pressure / 1013.25) * (288.15 / Temperature);
}
/// <summary>
/// 计算米氏散射系数
/// </summary>
/// <param name="wavelength">波长,单位:微米</param>
/// <returns>米氏散射系数单位km^-1</returns>
/// <remarks>
/// 基于能见度和气溶胶密度计算米氏散射
/// </remarks>
private double CalculateMieScattering(double wavelength)
{
// Mie散射系数计算km^-1
@ -74,6 +134,14 @@ namespace AirTransmission
return beta * alpha * (AerosolDensity / STANDARD_AEROSOL_DENSITY) * 3.5; // 从2.0改为3.5
}
/// <summary>
/// 计算分子吸收系数
/// </summary>
/// <param name="wavelength">波长,单位:微米</param>
/// <returns>分子吸收系数单位km^-1</returns>
/// <remarks>
/// 主要考虑水汽和CO2的吸收
/// </remarks>
private double CalculateMolecularAbsorption(double wavelength)
{
// 分子吸收系数计算km^-1
@ -123,7 +191,15 @@ namespace AirTransmission
return 0.16 * (CO2Concentration / 400.0); // 从0.08改为0.16
}
private double GetSpectralWeight(double wavelength)
/// <summary>
/// 获取特定波长的光谱权重
/// </summary>
/// <param name="wavelength">波长,单位:微米</param>
/// <returns>光谱权重范围0-1</returns>
/// <remarks>
/// 根据黑体辐射理论计算光谱权重
/// </remarks>
private static double GetSpectralWeight(double wavelength)
{
// 调整权重分布
if (wavelength >= 3.0 && wavelength <= 5.0)
@ -134,6 +210,17 @@ namespace AirTransmission
return 0.2; // 从0.3改为0.2
}
/// <summary>
/// 计算天气效应对透过率的影响
/// </summary>
/// <param name="distance">传输距离,单位:米</param>
/// <returns>天气影响因子范围0-1</returns>
/// <remarks>
/// 综合考虑:
/// - 降水(雨、雪)的影响
/// - 雾的衰减效应
/// - 沙尘的影响
/// </remarks>
private double CalculateWeatherEffect(double distance)
{
// 降低天气效应的影响

View File

@ -7,20 +7,37 @@
namespace AirTransmission
{
/// <summary>
/// 激光传输模型类,用于计算激光在大气中的传输特性
/// 激光透过率计算模型,用于计算激光在大气中的传输特性
/// </summary>
/// <remarks>
/// 主要功能:
/// - 计算激光在不同天气条件下的透过率
/// - 考虑大气湍流效应
/// - 处理烟雾对激光传输的影响
/// - 计算各种天气条件(雨、雪、雾、沙尘)的衰减效应
/// </remarks>
internal class LaserTransmittanceModel(WeatherCondition weather) : TransmittanceModel(weather)
{
/// <summary>
/// 激光波长(微米)
/// 激光波长常量,单位:微米
/// </summary>
/// <remarks>
/// 默认使用1.06μm波长对应Nd:YAG激光器的基频输出
/// </remarks>
private const double LASER_WAVELENGTH = 1.06;
/// <summary>
/// 计算给定距离的激光透过率
/// </summary>
/// <param name="distance">传输距离(米)</param>
/// <returns>激光透过率0到1之间的值</returns>
/// <param name="distance">传输距离,单位:米</param>
/// <returns>激光透过率范围0-1</returns>
/// <remarks>
/// 计算过程考虑:
/// - 分子散射和吸收
/// - 气溶胶散射
/// - 降水(雨、雪)衰减
/// - 雾和沙尘的影响
/// </remarks>
public override double CalculateTransmittance(double distance)
{
double attenuationFactor = CalculateAttenuationFactor();
@ -41,8 +58,11 @@ namespace AirTransmission
/// <summary>
/// 计算考虑湍流效应的激光透过率
/// </summary>
/// <param name="distance">传输距离(米)</param>
/// <returns>考虑湍流效应的激光透过率</returns>
/// <param name="distance">传输距离,单位:米</param>
/// <returns>考虑湍流效应后的透过率范围0-1</returns>
/// <remarks>
/// 使用大气湍流模型计算湍流对激光传输的影响
/// </remarks>
public double CalculateTransmittanceWithTurbulence(double distance)
{
double transmittance = CalculateTransmittance(distance);

View File

@ -7,13 +7,24 @@
namespace AirTransmission
{
/// <summary>
/// 毫米波传输模型类,用于计算毫米波在大气中的传输特性
/// 毫米波透过率计算模型,用于计算毫米波在大气中的传输特性
/// </summary>
/// <remarks>
/// 主要功能:
/// - 计算毫米波在不同天气条件下的透过率
/// - 考虑大气分子散射和吸收
/// - 处理水汽和氧气的吸收
/// - 计算各种天气条件(雨、雪、雾、沙尘)的衰减效应
/// </remarks>
internal class MillimeterWaveTransmittanceModel : TransmittanceModel
{
/// <summary>
/// 毫米波波长(毫米)
/// 毫米波波长常量,单位:毫米
/// </summary>
/// <remarks>
/// 默认使用3.19mm波长对应94GHz频率
/// 该频率是毫米波雷达常用工作频率
/// </remarks>
private const double MILLIMETER_WAVE_WAVELENGTH = 3.19; // 毫米对应94 GHz
public MillimeterWaveTransmittanceModel(WeatherCondition weather) : base(weather) { }
@ -21,8 +32,16 @@ namespace AirTransmission
/// <summary>
/// 计算给定距离的毫米波透过率
/// </summary>
/// <param name="distance">传输距离(米)</param>
/// <returns>毫米波透过率0到1之间的值</returns>
/// <param name="distance">传输距离,单位:米</param>
/// <returns>毫米波透过率范围0-1</returns>
/// <remarks>
/// 计算过程考虑:
/// - 分子散射和吸收
/// - 水汽吸收
/// - 氧气吸收
/// - 降水(雨、雪)衰减
/// - 雾和沙尘的影响
/// </remarks>
public override double CalculateTransmittance(double distance)
{
// 计算各种衰减机制
@ -49,7 +68,10 @@ namespace AirTransmission
/// <summary>
/// 计算分子散射系数
/// </summary>
/// <returns>分子散射系数km^-1</returns>
/// <returns>分子散射系数单位km^-1</returns>
/// <remarks>
/// 使用修正的瑞利散射公式,考虑温度和压力的影响
/// </remarks>
private double CalculateMolecularScattering()
{
// 分子散射系数计算km^-1

View File

@ -7,33 +7,44 @@
namespace AirTransmission
{
/// <summary>
/// 大气透过率模型的抽象基类,提供了各种大气条件下的透过率计算方法
/// 大气透过率计算的基础模型类,提供了各种大气条件下的透过率计算方法
/// </summary>
/// <remarks>
/// 包含以下主要衰减机制的计算:
/// - 分子散射和吸收
/// - 气溶胶散射和吸收
/// - 降水(雨、雪)衰减
/// - 沙尘和雾的衰减
/// </remarks>
internal abstract class TransmittanceModel(WeatherCondition weather)
{
// 常量
/// <summary>
/// 标准大气透过率
/// 标准大气透过率常量
/// </summary>
/// <remarks>
/// 在标准大气条件下23km能见度1013.25hPa气压20℃温度的透过率值
/// </remarks>
protected const double STANDARD_TRANSMITTANCE = 0.975; // 标准大气透过率
/// <summary>
/// 标准能见度(公里)
/// 标准能见度常量,单位:千米
/// </summary>
protected const double STANDARD_VISIBILITY = 23.0; // 标准能见度 (km)
/// <summary>
/// 标准气溶胶密度(粒子/立方厘米)
/// 标准气溶胶密度常量,单位:粒子/立方厘米
/// </summary>
protected const double STANDARD_AEROSOL_DENSITY = 100.0; // 标准气溶胶密度 (particles/cm³)
/// <summary>
/// 当前天气条件
/// 当前天气条件对象
/// </summary>
protected WeatherCondition weatherCondition = weather;
// 大气模型参数
/// <summary>
/// 温度(开尔文)
/// 温度,单位:开尔文
/// </summary>
/// <remarks>
/// 由摄氏度转换而来K = ℃ + 273.15
/// </remarks>
protected double Temperature { get; set; } = weather.Temperature + 273.15;
/// <summary>
/// 大气压力(百帕)

View File

@ -7,18 +7,54 @@
namespace AirTransmission
{
/// <summary>
/// 紫外线传输模型类,用于计算紫外线在大气中的传输特性
/// 紫外线透过率计算模型,用于计算紫外线在大气中的传输特性
/// </summary>
/// <remarks>
/// 主要功能:
/// - 计算紫外线在不同天气条件下的透过率
/// - 使用光谱模型法进行计算
/// - 考虑臭氧层吸收
/// - 计算各种天气条件(雨、雪、雾、沙尘)的衰减效应
/// </remarks>
internal class UVTransmittanceModel : TransmittanceModel
{
// 光谱分段参数
/// <summary>
/// 紫外波段最小波长,单位:微米
/// </summary>
private const double MIN_WAVELENGTH = 0.2; // 紫外波段最小波长(微米)
/// <summary>
/// 紫外波段最大波长,单位:微米
/// </summary>
private const double MAX_WAVELENGTH = 0.4; // 紫外波段最大波长(微米)
/// <summary>
/// 光谱分段数
/// </summary>
private const int SPECTRAL_BANDS = 100; // 光谱分段数
/// <summary>
/// 主要计算波长,单位:微米
/// </summary>
/// <remarks>
/// 选择0.308μm作为主要计算波长这是XeCl准分子激光器的输出波长
/// </remarks>
private const double UV_WAVELENGTH = 0.308; // 主要计算波长(微米)
public UVTransmittanceModel(WeatherCondition weather) : base(weather) { }
/// <summary>
/// 计算给定距离的紫外线透过率
/// </summary>
/// <param name="distance">传输距离,单位:米</param>
/// <returns>紫外线透过率范围0-1</returns>
/// <remarks>
/// 计算过程:
/// 1. 将光谱分为多个波段
/// 2. 对每个波段计算衰减
/// 3. 考虑天气条件的影响
/// 4. 综合得到最终透过率
/// </remarks>
public override double CalculateTransmittance(double distance)
{
// 将距离转换为千米

View File

@ -3,8 +3,23 @@ using System;
namespace AirTransmission
{
/// <summary>
/// 天气条件类
/// 天气条件类,用于描述大气传输计算所需的天气参数
/// </summary>
/// <remarks>
/// 包含以下主要天气参数:
/// - 天气类型(晴天、雨天、雪天等)
/// - 温度
/// - 相对湿度
/// - 能见度
/// - 降水量
/// - CO2浓度
/// </remarks>
/// <param name="type">天气类型</param>
/// <param name="temperature">温度(摄氏度)</param>
/// <param name="relativeHumidity">相对湿度(百分比)</param>
/// <param name="visibility">能见度(公里)</param>
/// <param name="precipitation">降水量(毫米/小时),可选</param>
/// <param name="co2Concentration">二氧化碳浓度ppm默认415ppm</param>
public class WeatherCondition(WeatherType type, double temperature, double relativeHumidity, double visibility, double? precipitation = null, double co2Concentration = 415)
{
/// <summary>
@ -35,7 +50,11 @@ namespace AirTransmission
/// <summary>
/// 打印天气信息
/// </summary>
/// <param name="weather">天气条件</param>
/// <param name="weather">天气条件对象</param>
/// <remarks>
/// 输出格式:
/// 天气类型: [类型], 温度: [温度]°C, 相对湿度: [湿度]%, 能见度: [能见度]km, 降水量: [降水量]mm/h
/// </remarks>
public static void PrintWeatherInfo(WeatherCondition weather){
Console.WriteLine($"---天气类型: {weather.Type}, 温度: {weather.Temperature}°C, 相对湿度: {weather.RelativeHumidity}%, 能见度: {weather.Visibility}km, 降水量: {weather.Precipitation ?? 0}mm/h");
}
@ -46,10 +65,25 @@ namespace AirTransmission
/// </summary>
public enum WeatherType
{
/// <summary>
/// 晴朗天气
/// </summary>
, // 晴朗天气
/// <summary>
/// 雨天
/// </summary>
, // 雨天
/// <summary>
/// 雪天
/// </summary>
, // 雪天
/// <summary>
/// 雾天
/// </summary>
, // 雾天
/// <summary>
/// 沙尘天气
/// </summary>
// 沙尘
}
}

View File

@ -1,9 +1,4 @@
/*
*
* 1.0.0 (2024-10-13):
*/
using AirTransmission;
using AirTransmission;
class Program
{

2
toc.yml Normal file
View File

@ -0,0 +1,2 @@
- name: API 文档
href: docs/