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

带包裹维度的Delaunay三角剖分实现咨询:如何处理yaw周期性

带周期yaw维度的三维Delaunay三角剖分实现方法

方法1:点集平铺偏移法(直接适配scipy.spatial.Delaunay,无需额外依赖)

这是最易实现的轻量方案,逻辑如下:

  • 由于yaw的周期为2π,将原始点集pts = [(x1,y1,yaw1), (x2,y2,yaw2), ...]复制出两个平移副本:
    • 副本1:yaw统一减2π,对应周期左边界外的镜像点
    • 副本2:yaw统一加2π,对应周期右边界外的镜像点
  • 合并原始点集、两个镜像副本得到总点集,调用scipy.spatial.Delaunay对总点集做三维Delaunay剖分
  • 过滤得到仅由原始点集组成的四面体(三维Delaunay的输出单元),最终结果即为适配yaw周期性的三角剖分。

注意:如果米和弧度的缩放系数不是1,偏移时需要同步乘以该缩放系数,保证yaw维度的周期距离计算正确。

方法2:角度高维嵌入法

将周期性的yaw维度拆为两个正交分量避免边界不连续:

  • 对每个点的yaw值,计算cos_yaw = cos(yaw)、sin_yaw = sin(yaw)
  • 把原始三维点扩展为四维点(x, y, cos_yaw, sin_yaw)
  • 对四维点集做Delaunay剖分,之后将结果映射回原(x,y,yaw)空间即可自动适配角度周期性

该方案无需手动处理边界过滤,但维度升高会明显增加计算量,仅适合点数较少的场景。

方法3:支持周期维度的专用库调用

如果不想手动处理数据适配,可以使用支持周期边界的三角剖分库pycddlib,配置时直接将yaw维度标记为周期性维度,即可直接输出符合要求的剖分结果,无需额外后处理。

简单示例代码(方法1)

import numpy as np
from scipy.spatial import Delaunay

# 原始点集:n个(x, y, yaw),yaw∈[0, 2π)
raw_pts = np.random.rand(100, 3)
raw_pts[:, 2] *= 2 * np.pi

# 生成镜像点集
offset = 2 * np.pi  # 缩放系数为1时的偏移量,系数变化时同步调整
pts_left = raw_pts.copy()
pts_left[:, 2] -= offset
pts_right = raw_pts.copy()
pts_right[:, 2] += offset
total_pts = np.vstack([pts_left, raw_pts, pts_right])

# 做Delaunay剖分
tri = Delaunay(total_pts)

# 过滤仅由原始点(索引在[n, 2n)区间)组成的单元
n = len(raw_pts)
valid_simplices = []
for simplex in tri.simplices:
    if np.all((simplex >= n) & (simplex < 2*n)):
        # 索引转换回原始点集的索引
        valid_simplices.append(simplex - n)
valid_simplices = np.array(valid_simplices)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 13:24:00