一、问题目标
给定一条 Bezier 曲线 r(t) = (x(t), y(t)),t ∈ [0, 1],其曲率定义为:
κ(t) = | x′(t)·y″(t) − y′(t)·x″(t) | ÷ [ x′(t)² + y′(t)² ]^(3⁄2)
目标:在 t ∈ [0, 1] 内找到使 κ(t) 取得最大值或最小值的参数 t*。
由于 κ(t) 通常无解析极值点,且可能不可导(因含绝对值),可采用黄金分割法进行数值优化——前提是 κ(t) 在搜索区间内是单峰函数(即只有一个极大值或极小值)。
二、黄金分割法简介
黄金分割法是一种无需导数的一维搜索算法,适用于单峰函数的极值求解。
定义黄金比例常数:
ρ = (√5 − 1) ÷ 2 ≈ 0.6180339887
设当前搜索区间为 [a, b],构造两个内点:
t₁ = b − ρ·(b − a)
t₂ = a + ρ·(b − a)
比较函数值 f(t₁) 与 f(t₂),逐步缩小区间,直到区间长度小于预设精度 ε(如 1×10⁻⁶)。
-
若求最大值:
若 f(t₁) < f(t₂),则极值点在 [t₁, b],令 a ← t₁
否则,极值点在 [a, t₂],令 b ← t₂ -
若求最小值:
若 f(t₁) > f(t₂),则极值点在 [t₁, b],令 a ← t₁
否则,极值点在 [a, t₂],令 b ← t₂
重复迭代,直至 |b − a| < ε。最终极值点近似为 t* = (a + b) ÷ 2。
三、Bezier 曲线曲率函数的构建(以三次为例)
设三次 Bezier 曲线由四个控制点 P

435

被折叠的 条评论
为什么被折叠?



