You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

scipy.spatial.Voronoi计算的Voronoi区域是否为顺时针朝向

scipy.spatial.Voronoi区域边界顶点的环绕方向说明

结论:该接口返回的二维Voronoi闭合有限区域,边界顶点的默认环绕排列方向为逆时针,并非顺时针。

以下是具体说明和验证方法:

  • 方向判定基准:上述结论基于标准数学二维坐标系(y轴向上)的环绕方向规则。如果你在可视化时使用了计算机图像领域常见的y轴向下坐标体系,视觉上看到的多边形环绕方向会呈现为顺时针,这是坐标系轴向翻转导致的视觉偏差,不是接口返回的顶点顺序本身有问题。
  • 验证方法:你可以通过鞋带公式(Shoelace formula)计算多边形有向面积自行验证,对闭合多边形来说,顶点按逆时针排列时计算出的有向面积为正值,顺时针排列时为负值。简单验证代码如下:
import numpy as np
from scipy.spatial import Voronoi

# 生成随机二维测试点
points = np.random.rand(20, 2)
vor = Voronoi(points)

# 选取第一个无无穷远顶点的闭合有限区域
for region_id in vor.point_region:
    vert_ids = vor.regions[region_id]
    # 过滤包含无穷远顶点(标记为-1)的非完全闭合区域
    if -1 not in vert_ids and len(vert_ids) >=3:
        poly = vor.vertices[vert_ids]
        # 鞋带公式计算有向面积
        n = len(poly)
        signed_area = 0.5 * np.sum(
            poly[np.arange(n), 0] * poly[(np.arange(n)+1)%n, 1]
            - poly[(np.arange(n)+1)%n, 0] * poly[np.arange(n), 1]
        )
        print(f"当前测试区域有向面积:{signed_area:.4f}")
        print("判定结果:", "逆时针排列" if signed_area > 0 else "顺时针排列")
        break
  • 关于含无穷远边的区域:如果区域顶点列表中存在-1标记,代表该位置对应无穷远处的虚拟顶点,这类开放区域的顶点排列逻辑和有限区域一致,但你需要自行根据vor.ridge_directions提供的方向向量补全无穷远边才能得到完整多边形,补全过程的方向处理错误会打乱整体环绕顺序,不属于接口返回顺序的问题。

内容的提问来源于stack exchange,提问作者TZDM

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 09:22:02