function [ic,ik] = bspdegelev(d,c,k,t)
%
% Function Name:
%
% bspdegevel - Degree elevate a univariate B-Spline.
%
% Calling Sequence:
%
% [ic,ik] = bspdegelev(d,c,k,t)
%
% Parameters:
%
% d : Degree of the B-Spline.
%
% c : Control points, matrix of size (dim,nc).
%
% k : Knot sequence, row vector of size nk.
%
% t : Raise the B-Spline degree t times.
%
% ic : Control points of the new B-Spline.
%
% ik : Knot vector of the new B-Spline.
%
% Description:
%
% Degree elevate a univariate B-Spline. This function provides an
% interface to a toolbox 'C' routine.
[mc,nc] = size(c);
%
% int bspdegelev(int d, double *c, int mc, int nc, double *k, int nk,
% int t, int *nh, double *ic, double *ik)
% {
% int row,col;
%
% int ierr = 0;
% int i, j, q, s, m, ph, ph2, mpi, mh, r, a, b, cind, oldr, mul;
% int n, lbz, rbz, save, tr, kj, first, kind, last, bet, ii;
% double inv, ua, ub, numer, den, alf, gam;
% double **bezalfs, **bpts, **ebpts, **Nextbpts, *alfs;
%
% double **ctrl = vec2mat(c, mc, nc);
% ic = zeros(mc,nc*(t)); % double **ictrl = vec2mat(ic, mc, nc*(t+1));
%
n = nc - 1; % n = nc - 1;
%
bezalfs = zeros(d+1,d+t+1); % bezalfs = matrix(d+1,d+t+1);
bpts = zeros(mc,d+1); % bpts = matrix(mc,d+1);
ebpts = zeros(mc,d+t+1); % ebpts = matrix(mc,d+t+1);
Nextbpts = zeros(mc,d+1); % Nextbpts = matrix(mc,d+1);
alfs = zeros(d,1); % alfs = (double *) mxMalloc(d*sizeof(double));
%
m = n + d + 1; % m = n + d + 1;
ph = d + t; % ph = d + t;
ph2 = floor(ph / 2); % ph2 = ph / 2;
%
% // compute bezier degree elevation coefficeients
bezalfs(1,1) = 1; % bezalfs[0][0] = bezalfs[ph][d] = 1.0;
bezalfs(d+1,ph+1) = 1; %
for i=1:ph2 % for (i = 1; i <= ph2; i++) {
inv = 1/bincoeff(ph,i); % inv = 1.0 / bincoeff(ph,i);
mpi = min(d,i); % mpi = min(d,i);
%
for j=max(0,i-t):mpi % for (j = max(0,i-t); j <= mpi; j++)
bezalfs(j+1,i+1) = inv*bincoeff(d,j)*bincoeff(t,i-j); % bezalfs[i][j] = inv * bincoeff(d,j) * bincoeff(t,i-j);
end
end % }
%
for i=ph2+1:ph-1 % for (i = ph2+1; i <= ph-1; i++) {
mpi = min(d,i); % mpi = min(d, i);
for j=max(0,i-t):mpi % for (j = max(0,i-t); j <= mpi; j++)
bezalfs(j+1,i+1) = bezalfs(d-j+1,ph-i+1); % bezalfs[i][j] = bezalfs[ph-i][d-j];
end
end % }
%
mh = ph; % mh = ph;
kind = ph+1; % kind = ph+1;
r = -1; % r = -1;
a = d; % a = d;
b = d+1; % b = d+1;
cind = 1; % cind = 1;
ua = k(1); % ua = k[0];
%
for ii=0:mc-1 % for (ii = 0; ii < mc; ii++)
ic(ii+1,1) = c(ii+1,1); % ictrl[0][ii] = ctrl[0][ii];
end %
for i=0:ph % for (i = 0; i <= ph; i++)
ik(i+1) = ua; % ik[i] = ua;
end %
% // initialise first bezier seg
for i=0:d % for (i = 0; i <= d; i++)
for ii=0:mc-1 % for (ii = 0; ii < mc; ii++)
bpts(ii+1,i+1) = c(ii+1,i+1); % bpts[i][ii] = ctrl[i][ii];
end
end %
% // big loop thru knot vector
while b < m % while (b < m) {
i = b; % i = b;
while b < m && k(b+1) == k(b+2) % while (b < m && k[b] == k[b+1])
b = b + 1; % b++;
end %
mul = b - i + 1; % mul = b - i + 1;
mh = mh + mul + t; % mh += mul + t;
ub = k(b+1); % ub = k[b];
oldr = r; % oldr = r;
r = d - mul; % r = d - mul;
%
% // insert knot u(b) r times
if oldr > 0 % if (oldr > 0)
lbz = floor((oldr+2)/2); % lbz = (oldr+2) / 2;
else % else
lbz = 1; % lbz = 1;
end %
if r > 0 % if (r > 0)
rbz = ph - floor((r+1)/2); % rbz = ph - (r+1)/2;
else % else
rbz = ph; % rbz = ph;
end
没有合适的资源?快使用搜索试试~ 我知道了~
nurbs_曲面拟合_NURBS曲面拟合_拟合_
共61个文件
m:59个
mat:2个
5星 · 超过95%的资源 47 下载量 71 浏览量
2021-10-02
05:05:26
上传
评论 11
收藏 40KB RAR 举报
温馨提示
NURBS方法是利用非均匀节点向量表达式构造有理B样条函数,能够对标准的解析结构和自由型曲面提供统一的数学表示,适用于各种自由型曲面及组合式曲面模型的构建。NURBS方法在拟合过程中通过调节控制点和权因子来实现对各种不同形状模型的高精度拟合。NURBS方法作为国际标准组织(ISO)颁布的工业产品几何定义STEP标准中自由型曲线曲面的唯一表示方法,在逆向工程中已经得到了广泛的应用。
资源详情
资源评论
资源推荐
收起资源包目录
nurbs_曲面拟合.rar (61个子文件)
nurbs_曲面拟合
democurve.m 604B
demorevolve.m 1021B
nrbreverse.m 887B
findspan.m 2KB
nrbdegelev.m 2KB
nrbextrude.m 1KB
nrbcirc.m 2KB
demohelix.m 637B
vecrotx.m 1KB
demokntins.m 577B
nrbrect.m 1024B
nrbtestsrf.m 1KB
bspkntins.m 6KB
nrbline.m 840B
vecdot.m 870B
democirc.m 311B
demorect.m 245B
nrbtransp.m 685B
demoellip.m 404B
demodersrf.m 857B
ans.mat 388B
demo4surf.m 259B
nrbtestcrv.m 286B
demoruled.m 427B
demodercrv.m 571B
demos.m 1KB
nrb4surf.m 1KB
basisfun.m 2KB
nrbkntins.m 3KB
bspeval.m 3KB
vectrans.m 1KB
demoline.m 216B
vecroty.m 1KB
coefs.mat 388B
nrbdeval.m 2KB
demogeom.m 763B
bspdegelev.m 20KB
demotorus.m 518B
vecscale.m 1KB
Contents.m 2KB
bspderiv.m 3KB
nrbcoons.m 4KB
democoons.m 966B
deg2rad.m 594B
nrbcylind.m 1KB
vecrotz.m 1KB
vecangle.m 891B
nrbplot.m 3KB
rad2deg.m 595B
nrbruled.m 2KB
nrbmak.m 5KB
nrbrevolve.m 3KB
nrbeval.m 4KB
nrbderiv.m 2KB
vecmag2.m 750B
vecnorm.m 776B
democylind.m 282B
demodegelev.m 526B
nrbtform.m 1KB
veccross.m 1KB
vecmag.m 714B
共 61 条
- 1
余淏
- 粉丝: 52
- 资源: 3975
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 基于MATLAB的钢板表面缺陷检测系统
- MS SQL里生成行政区域县区信息表和相应数据
- delphi实现DBGrid全选和反选功能
- 25C11F41-2B2A-4D1A-AAA8-7C654526B129.pdf
- Android Studio Jellyfish(android-studio-2023.3.1.18-cros.deb)
- MVC+EF框架+EasyUI实现权限管理源码程序
- python第66-75天,Day66-75.rar
- python后端服务project-of-tornado.rar
- python测验,hello-tornado.rar
- 基于SpringBoot+Vue3快速开发平台、自研工作流引擎源码设计.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论6