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

如何通过修改现有控制点位置扩展NURBS曲线且保持原有形状

NURBS曲线延长(保留原有形状)的控制点调整方法

已知定义

NURBS曲线表达式

$$C(t) = \frac{\sum_{i=0}^{n} N_{i,k}(t) w_i B_i}{\sum_{i=0}^{n} N_{i,k}(t) w_i}$$
其中:

  • $B_i$:全部控制点
  • $t$:曲线上点的参数
  • $w_i$:对应控制点的权因子
  • $N_{i,k}(t)$:k阶B样条基函数

B样条基函数递推定义

$$
\begin{cases}
N_{i,1}(t) = \begin{cases}
1, & X_i \leq t < X_{i+1} \
0, & \text{其他情况}
\end{cases} \
N_{i,k}(t) = \frac{t - X_i}{X_{i+k-1} - X_i} N_{i,k-1}(t) + \frac{X_{i+k} - t}{X_{i+k} - X_{i+1}} N_{i+1,k-1}(t)
\end{cases}
$$
其中:

  • $k$:曲线阶数(对应曲线次数为$k-1$)
  • $X_i$:节点向量的第$i$个节点

延长曲线的控制点调整方法

要仅通过调整(或外推添加)控制点来延长曲线,同时完全保留原有曲线形状,核心是保证原曲线端点处的各阶导数不变,以此推导控制点的外推公式,分两种常见节点类型处理:

1. 均匀非Clamped曲线(端点节点无重复)

对于k阶曲线,取末端相邻的2个控制点$B_{n-1}$、$B_n$,沿原末端切线方向外推新控制点,公式为:
$$B_{n+m} = B_n + m \cdot (B_n - B_{n-1})$$
其中$m$为外推步数($m=1$对应延长一段,$m=2$对应延长两段,以此类推)。

这种方法下,原曲线段的基函数权重和控制点组合完全不变,延长部分是原末端切线方向的自然延伸,不会改变原有曲线的形状。

2. Clamped曲线(端点节点重复k次,曲线端点固定在首个/末个控制点)

对于k阶Clamped曲线,末端的$k$个控制点决定了端点处的各阶导数,要保持导数不变,外推新控制点的公式为:
$$B_{n+1} = k \cdot B_n - (k-1) \cdot B_{n-1}$$
如果需要多次延长,可重复应用此公式,依次推导后续控制点:
$$B_{n+2} = k \cdot B_{n+1} - (k-1) \cdot B_n$$

补充说明

  • 若需严格保持NURBS曲线的有理特性,外推控制点的同时需同步外推对应权因子:均匀非Clamped场景下用$w_{n+m} = w_n + m \cdot (w_n - w_{n-1})$,Clamped场景下用$w_{n+1} = k \cdot w_n - (k-1) \cdot w_{n-1}$。
  • 若仅允许修改现有控制点,可将原末端的$k$个控制点按上述规则调整;更常用的方式是添加外推得到的新控制点,能更直观地保证原曲线形状完全不变。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 20:12:42