曲线总结

做导出插件遇到曲线问题,总结一下:

各种不同的曲线都可表示成:

s: 系数

P1: 起始点 P2:结束点 T1:起始点切线 T2:结束点切线

P: 所求插值点 

        | s^3 |               | P1 |                |  h00  h01  h02  h03  |
S =  | s^2 |       C =  | P2 |        h =  |  h10  h11  h12  h13  |
        | s^1 |               | T1 |                |  h20  h21  h22  h23  |
        | 1     |               | T2 |                |  h30  h31  h32  h33  |

P = S * h * C

Hermite曲线系数:

(等同 TCB曲线)

h = |  2  -2   1    1 |
| -3   3  -2  -1 |
|  0   0   1    0 |
|  1   0   0    0 |

Bezier曲线系数:

(等同 HYBRID)

b =   | -1   3  -3   1 |
         |  3  -6   3   0 |
         | -3   3   0   0 |
         |  1   0   0   0 |


从控制点得到切线

t(Tension): 曲张度  
c(Continuity): 改变速度
b(Bias) : 穿过控制点的方向
输入切线:
 
          (1-t)*(1-c)*(1+b)
TS    =   -----------------  * ( P   -  P    )
  i              2                i      i-1


          (1-t)*(1+c)*(1-b)
      +   -----------------  * ( P   -  P    )
                 2                i+1    i


输出切线:


          (1-t)*(1+c)*(1+b)
TD    =   -----------------  * ( P   -  P    )
  i              2                i      i-1


          (1-t)*(1-c)*(1-b)
      +   -----------------  * ( P   -  P    )
                 2                i+1    i
 


参考:

http://www.cubic.org/docs/hermite.htm

https://en.wikipedia.org/wiki/Kochanek%E2%80%93Bartels_spline


### NURBS曲线的数学定义、特点及应用总结 #### 数学定义 NURBS(Non-Uniform Rational B-Splines)是一种基于B样条基函数的数学表示方法,用于生成和表示曲线与曲面。其定义由控制点、权重、节点向量以及k次规范B样条基函数共同决定[^2]。具体来说,NURBS曲线的表达式为: \[ C(u) = \frac{\sum_{i=0}^{n} N_{i,k}(u) w_i P_i}{\sum_{i=0}^{n} N_{i,k}(u) w_i} \] 其中: - \(N_{i,k}(u)\) 是k次规范B样条基函数; - \(P_i\) 是控制点; - \(w_i\) 是与控制点对应的权因子。 对于标准型NURBS曲线,首末权因子均为1,其余权因子顺序K个不同时为0。 --- #### 特点 NURBS曲线具有以下显著特点: 1. **非均匀性**:节点向量可以是非均匀分布的,这使得曲线在不同区域具有不同的光滑性和灵活性[^1]。 2. **有理性**:通过引入权因子,NURBS曲线能够精确表示圆锥曲线(如圆、椭圆等)以及其他复杂形状。 3. **B样条基础**:NURBS曲线基于B样条基函数构建,继承了B样条的数值稳定性和计算效率。 4. **灵活性**:通过调整控制点、权重和节点向量,可以灵活地设计复杂的曲线和曲面。 5. **局部支撑性**:B样条基函数的局部支撑性质确保了对曲线局部修改时不会影响整体形状。 --- #### 应用 NURBS曲线因其强大的数学特性和灵活性,在多个领域得到了广泛应用: 1. **计算机辅助设计(CAD)**:NURBS是CAD系统中描述几何形状的核心工具,广泛应用于工业设计、建筑设计等领域[^1]。 2. **计算机图形学**:在动画制作和三维建模中,NURBS被用来创建平滑且精确的曲面和曲线[^3]。 3. **数控加工(CAM)**:NURBS曲线能够准确描述刀具路径,提高加工精度和效率。 4. **科学计算与仿真**:NURBS被用于流体动力学、结构分析等领域的几何建模和网格生成。 5. **机器人轨迹规划**:NURBS曲线可用于生成平滑的运动轨迹,满足机器人路径规划的需求。 --- #### 示例代码 以下是基于De Boor算法实现NURBS曲线计算的Python示例代码[^3]: ```python import numpy as np def de_boor(k, i, u, U, P, w): if k == 1: return P[i] * w[i] else: a = (u - U[i]) / (U[i + k - 1] - U[i]) if (U[i + k - 1] - U[i]) != 0 else 0 b = (U[i + k] - u) / (U[i + k] - U[i + 1]) if (U[i + k] - U[i + 1]) != 0 else 0 return (1 - a) * de_boor(k - 1, i + 1, u, U, P, w) + a * de_boor(k - 1, i, u, U, P, w) def nurbs_curve(degree, knots, control_points, weights, u_values): result = [] for u in u_values: point = np.zeros(4) for i in range(len(control_points)): point += de_boor(degree + 1, i, u, knots, control_points, weights) point /= point[3] # Perspective division result.append(point[:3]) return np.array(result) ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值