跳转到主要内容

基于Python的球面几何工具

项目描述

Documentation Status Spherical Geometry's Github Actions CI Status Spherical Geometry's Coverage Status PyPI 10.5281/zenodo.10020243

spherical_geometry 库是一个Python包,用于处理表示天空中任意区域的球面多边形。

安装

在PyPI上

pip install spherical-geometry

在conda上

conda install -c conda-forge spherical-geometry

需求

  • Python 3.9或更高版本

  • Numpy 1.23或更高版本

  • astropy 5.0.4或更高版本

  • qd-library 2.3.7 或更高版本(可选:如果不可用,将使用捆绑版本)。要强制使用系统安装的版本,请使用 USE_SYSTEM_QD=1 pip install . 编译。

捆绑的qd-library

来源: https://www.davidhbailey.com/dhbsoftware/qd-2.3.24.tar.gz

  • 提供自定义的 libqd/include/qd/qd_config.h 以避免运行任何配置脚本的需求。这种通用配置可能不会针对您的系统进行优化。

  • 当与系统优化的 qd 库链接时,spherical_geometry 测试套件会失败,因为测试是为通用情况编写的。

坐标表示

世界空间中的坐标通常表示为赤经和赤纬(radec),或经度和纬度。虽然这些表示方法很方便,但在两极处存在不连续性,使得在天空球体的任意位置上对这些坐标进行操作更加困难。因此,本库的所有内部操作都是在三维向量空间中完成的,其中坐标表示为 (x, y, z) 向量。spherical_geometry.vector 模块包含将 (ra, dec) 和 (x, y, z) 表示之间进行转换的函数。

尽管任何 (x, y, z) 三元组都代表一个向量,因此代表天空球体上的一个位置,但必须在归一化坐标和未归一化坐标之间做出区分。归一化坐标定义为长度为 1 的向量,即

\begin{equation*} \sqrt{x^2 + y^2 + z^2} = 1 \end{equation*}

为了防止不必要的重新计算,本库中的许多方法都假设传入的向量已经归一化。如果不是这种情况,可以使用 spherical_geometry.vector.normalize_vector 对向量数组进行归一化。

当不在笛卡尔向量中工作时,库允许用户在度或弧度中工作。所有需要或返回角度值的方法都有一个 degrees 关键字参数。当 degreesTrue 时,这些测量值以度为单位,否则以弧度为单位。

球面多边形

球面多边形是天空球体上由大圆弧包围的任意区域。它们由 ~spherical_geometry.polygon.SphericalPolygon 类表示。

表示

定义多边形的点可通过 ~polygon.SphericalPolygon.points 属性获得。它是一个 Nx3 数组,其中每一行是一个归一化的 (x, y, z) 向量。多边形点是显式封闭的,即第一个和最后一个点是相同的。

内部在哪里?

多边形的多边形边用于将“内部”区域与“外部”区域分开。在传统的二维平面表面上,“内部”是有限区域,“外部”是无限区域。然而,由于球面是环形的,即它自己环绕,球面多边形实际上定义了两个有限区域。为了指定哪个应被视为“内部”与“外部”,多边形的定义还有一个“内部点”,它只是任何应被视为多边形内部的点。

在以下图像中,内部点(用红色点标记)表明多边形的面积是绿色区域,而不是白色区域。

inside.png

多边形的内部点可以通过 ~polygon.SphericalPolygon.inside 属性获得。

方向是什么?

使用多边形的几个算法的正确性取决于定义它的点的方向一致性。也就是说,点应该按照顺时针顺序排列。在创建新的球面多边形时,如果点不是按照顺时针顺序排列,定义多边形的点的顺序将被反转。使用方法 SphericalPolygon.is_clockwise 来判断点是否按照顺时针顺序。它接受两个连续的边并计算边的法向量。如果法向量指向球体中心内部,则两个边是逆时针的。如果法向量指向外部,则两个边是顺时针的。代码通过计算两个边与两个边的顶点的三重积来确定方向。对所有边求和的三重积给出多边形中点的占主导地位的方向。

不连续的多边形

如果一个多边形是多个多边形交集的结果,它可能是断开的。断开的多边形表示为球面多边形的列表。库内部处理这些细节。然而,用户必须意识到,多边形的几个属性是生成器,一次返回一个多边形的值。要访问所有属性的值,可以使用for循环或将属性强制转换为列表。是生成器的属性有

  • SphericalPolygon.points:定义每个多边形的点

  • SphericalPolygon.inside:每个多边形的内部点

如果两个多边形的交集生成断开的多边形,则代码将计算断开多边形的新内部点。

创建球面多边形

SphericalPolygon 对象有5种不同的构造函数

  • SphericalPolygon:接受一个 (x, y, z) 点的数组,或一个断开 SphericalPolygon 实例的列表。

  • SphericalPolygon.from_radec:接受一个 (ra, dec) 点的数组和内部点。

  • SphericalPolygon.from_cone:从一个天球上的圆锥创建多边形。接受 (ra, dec, radius)。

  • SphericalPolygon.from_wcs:使用其WCS头关键字从FITS图像的足迹创建多边形。接受FITS文件名或 astropy.io.fits.Header 对象。

  • SphericalPolygon.convex_hull:创建一个多边形,它是点列表的凸包。

球面多边形上的操作

一旦有一个 SphericalPolygon 对象,就有许多操作可用

  • ~SphericalPolygon.contains_point:确定给定点是否在多边形内部。

  • ~SphericalPolygon.intersects_poly:确定一个多边形是否与另一个多边形相交。

  • ~SphericalPolygon.area:确定多边形的面积。

  • ~SphericalPolygon.union~SphericalPolygon.multi_union:返回两个或多个多边形并集的新多边形。

  • ~SphericalPolygon.intersection~SphericalPolygon.multi_intersection:返回两个或多个多边形交集的新多边形。

  • ~SphericalPolygon.overlap:确定给定多边形与另一个多边形重叠的程度。

  • ~SphericalPolygon.to_radec:将多边形中的 (x, y, z) 点转换为 (ra, dec) 点。

  • ~SphericalPolygon.draw:使用matplotlib的Basemap工具包绘制多边形。这个特性相当简单,主要用于调试目的。

大圆弧

如上所示,大圆弧被用来定义多边形的边。模块 spherical_geometry.great_circle_arc 包含了处理这些弧线的一系列有用函数。

  • length:返回球面上两点之间的角距离。

  • intersection:返回两个大圆弧的交点。

  • intersects:判断两个大圆弧是否相交。

  • intersects_point:判断一个点是否在大圆弧上。

  • angle:计算两个大圆弧之间的角度。

  • midpoint:计算大圆弧的中点。

项目详情


下载文件

下载适合您平台的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。

源代码分发

spherical_geometry-1.3.2.tar.gz (8.7 MB 查看哈希值)

上传时间 源代码

构建分发

spherical_geometry-1.3.2-cp312-cp312-win_amd64.whl (7.7 MB 查看哈希值)

上传时间 CPython 3.12 Windows x86-64

spherical_geometry-1.3.2-cp312-cp312-win32.whl (7.7 MB 查看哈希值)

上传时间 CPython 3.12 Windows x86

spherical_geometry-1.3.2-cp312-cp312-musllinux_1_2_x86_64.whl (9.5 MB 查看哈希值)

上传时间 CPython 3.12 musllinux: musl 1.2+ x86-64

spherical_geometry-1.3.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (8.6 MB 查看哈希值)

上传时间 CPython 3.12 manylinux: glibc 2.17+ x86-64

spherical_geometry-1.3.2-cp312-cp312-macosx_11_0_arm64.whl (7.7 MB 查看哈希值)

上传于 CPython 3.12 macOS 11.0+ ARM64

spherical_geometry-1.3.2-cp312-cp312-macosx_10_9_x86_64.whl (7.7 MB 查看哈希值)

上传于 CPython 3.12 macOS 10.9+ x86-64

spherical_geometry-1.3.2-cp311-cp311-win_amd64.whl (7.7 MB 查看哈希值)

上传于 CPython 3.11 Windows x86-64

spherical_geometry-1.3.2-cp311-cp311-win32.whl (7.7 MB 查看哈希值)

上传于 CPython 3.11 Windows x86

spherical_geometry-1.3.2-cp311-cp311-musllinux_1_2_x86_64.whl (9.5 MB 查看哈希值)

上传于 CPython 3.11 musllinux: musl 1.2+ x86-64

spherical_geometry-1.3.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (8.6 MB 查看哈希值)

上传于 CPython 3.11 manylinux: glibc 2.17+ x86-64

spherical_geometry-1.3.2-cp311-cp311-macosx_11_0_arm64.whl (7.7 MB 查看哈希值)

上传于 CPython 3.11 macOS 11.0+ ARM64

spherical_geometry-1.3.2-cp311-cp311-macosx_10_9_x86_64.whl (7.7 MB 查看哈希值)

上传于 CPython 3.11 macOS 10.9+ x86-64

spherical_geometry-1.3.2-cp310-cp310-win_amd64.whl (7.7 MB 查看哈希值)

上传于 CPython 3.10 Windows x86-64

spherical_geometry-1.3.2-cp310-cp310-win32.whl (7.7 MB 查看哈希值)

上传于 CPython 3.10 Windows x86

spherical_geometry-1.3.2-cp310-cp310-musllinux_1_2_x86_64.whl (9.5 MB 查看哈希值)

上传时间 CPython 3.10 musllinux: musl 1.2+ x86_64

spherical_geometry-1.3.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (8.6 MB 查看哈希值)

上传时间 CPython 3.10 manylinux: glibc 2.17+ x86_64

spherical_geometry-1.3.2-cp310-cp310-macosx_11_0_arm64.whl (7.7 MB 查看哈希值)

上传时间 CPython 3.10 macOS 11.0+ ARM64

spherical_geometry-1.3.2-cp310-cp310-macosx_10_9_x86_64.whl (7.7 MB 查看哈希值)

上传时间 CPython 3.10 macOS 10.9+ x86_64

spherical_geometry-1.3.2-cp39-cp39-win_amd64.whl (7.7 MB 查看哈希值)

上传时间 CPython 3.9 Windows x86_64

spherical_geometry-1.3.2-cp39-cp39-win32.whl (7.7 MB 查看哈希值)

上传时间 CPython 3.9 Windows x86

spherical_geometry-1.3.2-cp39-cp39-musllinux_1_2_x86_64.whl (9.5 MB 查看哈希值)

上传时间 CPython 3.9 musllinux: musl 1.2+ x86_64

spherical_geometry-1.3.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (8.6 MB 查看哈希值)

上传时间 CPython 3.9 manylinux: glibc 2.17+ x86_64

spherical_geometry-1.3.2-cp39-cp39-macosx_11_0_arm64.whl (7.7 MB 查看哈希值)

上传时间 CPython 3.9 macOS 11.0+ ARM64

spherical_geometry-1.3.2-cp39-cp39-macosx_10_9_x86_64.whl (7.7 MB 查看哈希值)

上传时间 CPython 3.9 macOS 10.9+ x86_64

由以下支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页面