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

包含回旋曲线(Euler曲线)与圆弧的组合曲线坐标计算求助

组合回旋曲线拼接实现方案

你需要的目标曲线为道路工程常用的对称型平曲线组合,结构为直线段→入口回旋线→圆曲线段→出口回旋线→直线段,对应参考示意图如下:
Curve

你已经完成第一段入口回旋线的坐标计算,按以下步骤即可完成其余段的拼接:

  • 第一步:提取第一段回旋线的终点基准参数
    完成入口回旋线计算后,务必留存三个核心参数:终点坐标(x_hy, y_hy)、终点切线方位角α_hy(单位为弧度)、终点曲率k,该曲率与后续圆曲线的曲率完全相等,是曲率连续的核心条件。
  • 第二步:计算中间圆曲线段的全局坐标
    圆曲线曲率半径R = 1/k,按需求给定圆曲线总圆心角θ(或给定圆曲线长度L_c = R * θ),先生成圆曲线的局部坐标,再通过旋转平移变换到全局坐标系:
    1. 局部坐标(以圆曲线起点为原点,起点切线方向为局部x轴,左转曲线y轴正方向指向曲线内侧)公式:
      x_local = R * sin(φ)
      y_local = R * (1 - cos(φ))
      其中φ为圆曲线当前点相对起点的圆心角,取值范围为0 ~ θ
    2. 局部坐标转全局坐标公式:
      x_global = x_hy + x_local * cos(α_hy) - y_local * sin(α_hy)
      y_global = y_hy + x_local * sin(α_hy) + y_local * cos(α_hy)
      计算完成后留存圆曲线终点坐标(x_yh, y_yh)、终点切线方位角α_yh = α_hy + θ(右转曲线改为α_hy - θ)
  • 第三步:计算出口回旋线的全局坐标
    出口回旋线与入口回旋线参数对称,曲率从k线性降至0,无需重新计算回旋线核心逻辑:
    1. 将入口回旋线的局部坐标序列反转,再沿局部x轴镜像(y值乘-1,右转曲线无需镜像),得到出口回旋线的局部坐标序列,去掉序列第一个和前一段重复的端点
    2. 复用第二步的坐标变换逻辑,以圆曲线终点(x_yh, y_yh)为原点、α_yh为初始方位角,将出口回旋线的局部坐标转换为全局坐标
  • 第四步:拼接所有曲线段的坐标序列,过滤掉各段衔接处的重复端点,即可得到完整的组合曲线坐标。

以下是极简的Python实现示例:

import numpy as np

# 假设已有的输入参数
clothoid1 = [] # 你已经算出的入口回旋线全局坐标列表,每个元素为(x,y)
alpha_hy = 0.785 # 入口回旋线终点切线方位角,单位弧度,示例值为45度
R = 100 # 圆曲线半径,由入口回旋线终点曲率计算得到 R=1/k
theta = 0.523 # 圆曲线总圆心角,单位弧度,示例值为30度

# 生成圆曲线坐标
phi_arr = np.linspace(0, theta, 50)
x_local_circle = R * np.sin(phi_arr)
y_local_circle = R * (1 - np.cos(phi_arr))
# 转全局坐标,去掉和入口回旋线重复的起点
x_circle = clothoid1[-1][0] + x_local_circle[1:] * np.cos(alpha_hy) - y_local_circle[1:] * np.sin(alpha_hy)
y_circle = clothoid1[-1][1] + x_local_circle[1:] * np.sin(alpha_hy) + y_local_circle[1:] * np.cos(alpha_hy)
circle = list(zip(x_circle, y_circle))

# 生成出口回旋线局部坐标,这里取和入口对称的参数
clothoid1_local = [] # 你计算入口回旋线时生成的局部坐标列表,每个元素为(x,y)
clothoid2_local = [(x, -y) for x, y in reversed(clothoid1_local)][1:]
# 转全局坐标
alpha_yh = alpha_hy + theta
clothoid2 = []
for x_local, y_local in clothoid2_local:
    x_g = circle[-1][0] + x_local * np.cos(alpha_yh) - y_local * np.sin(alpha_yh)
    y_g = circle[-1][1] + x_local * np.sin(alpha_yh) + y_local * np.cos(alpha_yh)
    clothoid2.append((x_g, y_g))

# 拼接得到完整曲线
full_curve = clothoid1 + circle + clothoid2

注:如果使用非对称组合曲线,仅需调整出口回旋线的局部坐标参数,坐标变换逻辑通用;如果曲线为右转,调整所有y_local的符号即可适配。

内容的提问来源于stack exchange,提问作者Jan Novák

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 11:06:03