Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 

Repository files navigation

椭球面法截面·法截弧·大地线 三维可视化

Python License

Ellipsoid Normal Sections & Geodesic — Interactive 3D Visualization

交互式三维可视化旋转椭球面上的法截面 (normal section)、法截弧 (normal section curve) 和大地线 (geodesic),帮助直观理解大地测量学中这三个核心概念的几何关系。


几何原理 / Theory

P1 和 P2 处椭球面法线方向不同
        ↓
两个法截面是不同的平面
        ↓
两条法截弧不重合 (正法截弧 ≠ 反法截弧)
        ↓
大地线介于两条法截弧之间
概念 英文 定义
法截面 Normal section plane 包含椭球面上某点法线的平面
法截弧 Normal section curve 法截面与椭球面的交线(椭圆)
大地线 Geodesic 椭球面上两点间的最短路径

关键区别:在球面上,法线恒指向球心,两点间的正反法截弧重合(都是大圆弧)。在椭球面上,法线不指向椭球中心,正反法截弧是不同的曲线,大地线介于两者之间。


截图 / Screenshot

运行后将看到:

  • 半透明椭球面(可调透明度)
  • P1 (红点)P2 (绿点) 两点
  • 虚线:椭球中心到表面点的径向线
  • 实线:表面法线(明显偏离径向线)
  • 红色椭圆:过 P1 法线的完整法截弧
  • 绿色椭圆:过 P2 法线的完整法截弧
  • 金色粗线:P1↔P2 大地线(最短路径)
  • 左侧文字框:几何原理解释

安装 / Installation

# 克隆仓库
git clone https://github.com/YOUR_USERNAME/ellipsoid-visualizer.git
cd ellipsoid-visualizer

# 安装依赖 (推荐使用国内镜像)
pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple --trusted-host pypi.tuna.tsinghua.edu.cn

依赖 / Dependencies

用途
numpy 向量/矩阵运算
scipy ODE 数值积分(大地线打靶法)
matplotlib 3D 交互式绘图
geographiclib 精确大地线计算(Karney 算法)

用法 / Usage

# 默认参数 (高度夸大扁率 f=1/3,差异肉眼可见)
python ellipsoid_visualizer.py

# 中等夸大扁率
python ellipsoid_visualizer.py --f 10

# 真实 WGS84 椭球 (地球参数,法截弧差异极微小)
python ellipsoid_visualizer.py --f 298.257

# 球面模型 (法截弧 = 大地线 = 大圆弧)
python ellipsoid_visualizer.py --sphere

# 自定义椭球参数
python ellipsoid_visualizer.py --a 6378245 --b 6356863

# 自定义两点坐标
python ellipsoid_visualizer.py --B1 45 --L1 0 --B2 -30 --L2 80

# 保存为图片 (非交互模式)
python ellipsoid_visualizer.py --output figure.png

交互控件 / Interactive Controls

控件 功能
B1/L1/B2/L2 滑块 拖动调整两点经纬度
透明度滑块 调节椭球面不透明度 (0.02~0.80)
复选框 开关法截弧/大地线/法截面/法线显示
鼠标拖拽 旋转/缩放三维视图

命令行参数 / CLI Reference

参数 类型 默认值 说明
--a float 6378137 长半轴 (m)
--f float 3 扁率倒数 (3=高度夸大, 10=中等, 298.257=WGS84)
--b float 短半轴 (m),与 --f 二选一
--sphere flag 球面模型 (R=6371 km)
--B1 float 60 P1 大地纬度 (度)
--L1 float 0 P1 大地经度 (度)
--B2 float 0 P2 大地纬度 (度)
--L2 float 50 P2 大地经度 (度)
--output path 输出图片路径 (非交互模式)
--no-interactive flag 非交互模式 (显示但不保存)

为什么默认扁率是 1/3 而非 WGS84?

地球椭球的扁率极小(f ≈ 1/298.257),肉眼几乎无法分辨椭球与球体的区别,法截弧与大地线的差异在屏幕分辨率下完全不可见。这是大地测量学的几何事实,而非程序缺陷。

教学上通过夸大扁率来展示三个概念的几何关系。运行 --f 298.257 可切换为真实地球参数,但两条法截弧将几乎完全重叠。


实现细节 / Implementation

法截弧计算 (射线-椭球求交法)

法截面由参考点 P、法线方向 n 和张成平面的正交基 {e₁, e₂} 定义。对平面内每条方向 d(θ),求解射线与椭球的交点:

(P + t·d)ᵀ D (P + t·d) = 1
→  t²(dᵀDd) + 2t(PᵀDd) = 0
→  t = −2(PᵀDd) / (dᵀDd)

其中 D = diag(1/a², 1/a², 1/b²) 为椭球二次型矩阵。

大地线计算

主路径:使用 geographiclib 的 Karney 算法(亚毫米精度)。

回退路径(geographiclib 未安装时):Clairaut 方程打靶法——

r · sin(α) = C  (Clairaut 定理)
dλ/dβ = C·√(1−e²cos²β) / (cos²β·√(a²cos²β−C²))

通过 Brent 求根搜索使积分终点与目标经度一致的 Clairaut 常数 C。


项目结构 / Structure

ellipsoid-visualizer/
├── ellipsoid_visualizer.py   # 主程序 (单文件)
├── requirements.txt          # Python 依赖
├── LICENSE                   # MIT 许可证
├── README.md                 # 本文件
└── .gitignore                # Git 忽略规则

License

MIT — 自由使用、修改和分发。


参考资料 / References

  • 孔祥元, 郭际明, 刘宗泉. 《大地测量学基础》(第二版). 武汉大学出版社, 2010.
  • Karney, C.F.F. Algorithms for geodesics. Journal of Geodesy, 2013.
  • geographiclib documentation

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages