ViewDesignEngine  3.1.0
高性能 CAD 计算几何引擎
vde::curves::NurbsCurve类 参考

NURBS 曲线(Non-Uniform Rational B-Spline) 更多...

#include <nurbs_curve.h>

Public 成员函数

 NurbsCurve (std::vector< Point3D > control_points, std::vector< double > knots, std::vector< double > weights, int degree)
 构造 NURBS 曲线 更多...
 
Point3D evaluate (double t) const
 在参数 t 处求值 更多...
 
Vector3D derivative (double t, int order=1) const
 在参数 t 处求导数 更多...
 
int degree () const
 曲线阶次 更多...
 
std::pair< double, double > domain () const
 参数定义域 更多...
 
const std::vector< Point3D > & control_points () const
 控制点访问 更多...
 
const std::vector< double > & weights () const
 权重访问 更多...
 
const std::vector< double > & knots () const
 节点向量访问 更多...
 

详细描述

NURBS 曲线(Non-Uniform Rational B-Spline)

B 样条的有理推广,引入权重 w_i 使每个控制点的影响可调。 通过投影变换将齐次坐标中的 B 样条映射到 3D 空间。

求值公式:C(t) = Σ N_{i,p}(t) · w_i · P_i / Σ N_{i,p}(t) · w_i

关键性质:

  • 可精确表示圆锥曲线(圆、椭圆)——Bézier/B 样条无法做到
  • 权重 w_i 越大,曲线越靠近控制点 P_i
  • 所有权重 = 1 时退化为 B 样条
  • 所有权重 > 0 时在凸包内

在文件 nurbs_curve.h26 行定义.

构造及析构函数说明

◆ NurbsCurve()

vde::curves::NurbsCurve::NurbsCurve ( std::vector< Point3D >  control_points,
std::vector< double >  knots,
std::vector< double >  weights,
int  degree 
)

构造 NURBS 曲线

参数
control_points控制点序列
knots节点向量
weights权重序列,必须与 control_points 等长,各分量 > 0
degree阶次 p
注解
所有权重必须 > 0 以保证分母不为零(非退化)
// 用 NURBS 表示四分之一圆(7 个控制点,三次)
NurbsCurve arc(cps, {0,0,0,0, 0.5, 1,1,1,1},
{1, sqrt2/2, 1, sqrt2/2, 1, sqrt2/2, 1}, 3);
NurbsCurve(std::vector< Point3D > control_points, std::vector< double > knots, std::vector< double > weights, int degree)
构造 NURBS 曲线

成员函数说明

◆ control_points()

const std::vector<Point3D>& vde::curves::NurbsCurve::control_points ( ) const
inline

控制点访问

返回
只读引用

在文件 nurbs_curve.h79 行定义.

◆ degree()

int vde::curves::NurbsCurve::degree ( ) const
inline

曲线阶次

返回
p

在文件 nurbs_curve.h67 行定义.

◆ derivative()

Vector3D vde::curves::NurbsCurve::derivative ( double  t,
int  order = 1 
) const

在参数 t 处求导数

参数
t参数值
order导数阶数
返回
导数向量
注解
有理导数公式: C^{(k)} = (A^{(k)} - Σ_{j=1}^{k} C(k,j) · w^{(j)} · C^{(k-j)}) / w 其中 A(t) = Σ N_i(t)·w_i·P_i,w(t) = Σ N_i(t)·w_i

◆ domain()

std::pair<double, double> vde::curves::NurbsCurve::domain ( ) const

参数定义域

返回
[knots[degree], knots[n+1]]

◆ evaluate()

Point3D vde::curves::NurbsCurve::evaluate ( double  t) const

在参数 t 处求值

参数
t参数值
返回
曲线上对应 t 的点坐标
注解
内部将 (w·P, w) 提升为齐次坐标的 B 样条,求值后投影回 3D

◆ knots()

const std::vector<double>& vde::curves::NurbsCurve::knots ( ) const
inline

节点向量访问

返回
只读引用

在文件 nurbs_curve.h91 行定义.

◆ weights()

const std::vector<double>& vde::curves::NurbsCurve::weights ( ) const
inline

权重访问

返回
只读引用

在文件 nurbs_curve.h85 行定义.


该类的文档由以下文件生成: