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

NURBS 张量积曲面 更多...

#include <nurbs_surface.h>

Public 成员函数

 NurbsSurface (std::vector< std::vector< Point3D >> control_grid, std::vector< double > knots_u, std::vector< double > knots_v, std::vector< std::vector< double >> weights, int degree_u, int degree_v)
 构造 NURBS 曲面 更多...
 
Point3D evaluate (double u, double v) const
 求曲面点 S(u,v) 更多...
 
Vector3D derivative_u (double u, double v) const
 u 向偏导数 更多...
 
Vector3D derivative_v (double u, double v) const
 v 向偏导数 更多...
 
Vector3D normal (double u, double v) const
 单位法向量 更多...
 
int degree_u () const
 u 向阶次 更多...
 
int degree_v () const
 v 向阶次 更多...
 
std::array< int, 2 > num_control_points () const
 控制点数量 更多...
 
const std::vector< double > & knots_u () const
 u 向节点向量 更多...
 
const std::vector< double > & knots_v () const
 v 向节点向量 更多...
 
const std::vector< std::vector< Point3D > > & control_points () const
 控制点网格访问 更多...
 
const std::vector< std::vector< double > > & weights () const
 权重网格访问 更多...
 
std::pair< std::vector< Point3D >, std::vector< std::array< int, 3 > > > tessellate (int res_u, int res_v) const
 将 NURBS 曲面三角化 更多...
 

静态 Public 成员函数

static NurbsSurface ruled (const NurbsCurve &c1, const NurbsCurve &c2)
 由两条 NURBS 曲线创建直纹面 更多...
 
static NurbsSurface revolve (const NurbsCurve &profile, const Point3D &axis_origin, const Vector3D &axis_dir, double angle_rad)
 由截面曲线旋转生成旋转曲面 更多...
 

详细描述

NURBS 张量积曲面

由 (nu+1)×(nv+1) 控制点网格、权重网格、u/v 节点向量及阶次定义。 求值公式: S(u,v) = Σ_i Σ_j N_{i,pu}(u)·N_{j,pv}(v)·w_{ij}·P_{ij} / Σ_i Σ_j N_{i,pu}(u)·N_{j,pv}(v)·w_{ij}

可精确表示球面、圆柱面、锥面等二次曲面。广泛应用于 CAD 数据交换。

在文件 nurbs_surface.h24 行定义.

构造及析构函数说明

◆ NurbsSurface()

vde::curves::NurbsSurface::NurbsSurface ( std::vector< std::vector< Point3D >>  control_grid,
std::vector< double >  knots_u,
std::vector< double >  knots_v,
std::vector< std::vector< double >>  weights,
int  degree_u,
int  degree_v 
)

构造 NURBS 曲面

参数
control_grid控制点网格
knots_uu 向节点向量
knots_vv 向节点向量
weights权重网格,维度与 control_grid 一致,所有值 > 0
degree_uu 向阶次
degree_vv 向阶次
NurbsSurface sphere(grid, u_knots, v_knots, weights, 3, 3);
const std::vector< std::vector< double > > & weights() const
权重网格访问
NurbsSurface(std::vector< std::vector< Point3D >> control_grid, std::vector< double > knots_u, std::vector< double > knots_v, std::vector< std::vector< double >> weights, int degree_u, int degree_v)
构造 NURBS 曲面
double sphere(const Point3D &p, double radius)
球体的 SDF

成员函数说明

◆ control_points()

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

控制点网格访问

返回
只读引用

在文件 nurbs_surface.h111 行定义.

◆ degree_u()

int vde::curves::NurbsSurface::degree_u ( ) const
inline

u 向阶次

返回
pu

在文件 nurbs_surface.h79 行定义.

◆ degree_v()

int vde::curves::NurbsSurface::degree_v ( ) const
inline

v 向阶次

返回
pv

在文件 nurbs_surface.h85 行定义.

◆ derivative_u()

Vector3D vde::curves::NurbsSurface::derivative_u ( double  u,
double  v 
) const

u 向偏导数

参数
uu 参数
vv 参数
返回
∂S/∂u

◆ derivative_v()

Vector3D vde::curves::NurbsSurface::derivative_v ( double  u,
double  v 
) const

v 向偏导数

参数
uu 参数
vv 参数
返回
∂S/∂v

◆ evaluate()

Point3D vde::curves::NurbsSurface::evaluate ( double  u,
double  v 
) const

求曲面点 S(u,v)

参数
uu 参数
vv 参数
返回
曲面上对应 (u,v) 的 3D 点

◆ knots_u()

const std::vector<double>& vde::curves::NurbsSurface::knots_u ( ) const
inline

u 向节点向量

返回
只读引用

在文件 nurbs_surface.h99 行定义.

◆ knots_v()

const std::vector<double>& vde::curves::NurbsSurface::knots_v ( ) const
inline

v 向节点向量

返回
只读引用

在文件 nurbs_surface.h105 行定义.

◆ normal()

Vector3D vde::curves::NurbsSurface::normal ( double  u,
double  v 
) const

单位法向量

参数
uu 参数
vv 参数
返回
N(u,v) = normalize(∂S/∂u × ∂S/∂v)

◆ num_control_points()

std::array<int, 2> vde::curves::NurbsSurface::num_control_points ( ) const
inline

控制点数量

返回
{nu+1, nv+1},即网格的行数和列数

在文件 nurbs_surface.h91 行定义.

◆ revolve()

static NurbsSurface vde::curves::NurbsSurface::revolve ( const NurbsCurve profile,
const Point3D &  axis_origin,
const Vector3D &  axis_dir,
double  angle_rad 
)
static

由截面曲线旋转生成旋转曲面

参数
profile截面 NURBS 曲线
axis_origin旋转轴上一点
axis_dir旋转轴方向
angle_rad旋转角度(弧度),≤ 2π
返回
旋转 NURBS 曲面
注解
使用 NURBS 表示圆弧的权重方案;完整旋转生成闭曲面
auto rev = NurbsSurface::revolve(profile, origin, {0,0,1}, M_PI);
static NurbsSurface revolve(const NurbsCurve &profile, const Point3D &axis_origin, const Vector3D &axis_dir, double angle_rad)
由截面曲线旋转生成旋转曲面

◆ ruled()

static NurbsSurface vde::curves::NurbsSurface::ruled ( const NurbsCurve c1,
const NurbsCurve c2 
)
static

由两条 NURBS 曲线创建直纹面

参数
c1起始曲线(v=0 边界)
c2终止曲线(v=1 边界)
返回
直纹 NURBS 曲面
注解
两条曲线需具有兼容的阶次和节点结构(内部做升阶和节点精化对齐)
参见
blend_surfaces ruled_surface

◆ tessellate()

std::pair<std::vector<Point3D>, std::vector<std::array<int,3> > > vde::curves::NurbsSurface::tessellate ( int  res_u,
int  res_v 
) const

将 NURBS 曲面三角化

参数
res_uu 方向采样分辨率
res_vv 方向采样分辨率
返回
{顶点数组, 三角形索引数组},每个三角形为 {i0,i1,i2}
注解
生成 res_u×res_v 均匀网格,每个单元格拆为两个三角形
参见
tessellate

◆ weights()

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

权重网格访问

返回
只读引用

在文件 nurbs_surface.h117 行定义.


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