计算nurbs曲率NURBS曲线的曲率计算

计算nurbs曲率NURBS曲线的曲率计算

https://download.csdn.net/download/yishang44/10383324

 

NURBS曲线的计算和求导

,主要看的书籍是《The NURBS book》,代码主要参考nurbs工具箱-M语言,下面将计算曲率的相关代码贴出并加以注释。主要算法参考《The NURBS book》P127,ALGORITHM A4.2

脚本函数,用半径为1的圆测试

ut = linspace(0.0,1.0,50);

crv = nrbcirc(); 
crv.order
crv.coefs
crv.knots

[p, w] = nrbeval(crv,ut);
p = p./repmat(w,[3,1])
tem = [];
for i=1:50
    tem = [tem;norm(p(:,i))];
end
plot(p(1,:),p(2,:))
 axis equal
 grid on

curvature = clcCurvature(crv,ut)

clcCurvature()函数用于计算曲率

function curvature = clcCurvature(nurbs,ut)
%clcCurvature - 计算NURBS曲率
%
% Syntax: curvature = clcCurvature(nurbs,ut)
%       input:
%               nurbs:nurbs曲线的表达式,来源于nrbmak.m
%               ut:需要计算的曲率的点
%
% Description: 
%       该算法来源于 The nurbs book 算法:A4.2

dnurbs = nrbderiv(nurbs);
ddnurbs = nrbderiv(dnurbs);

[p w] = nrbeval(nurbs,ut);
[p1 w1] = nrbeval(dnurbs,ut);
[p2 w2] = nrbeval(ddnurbs,ut);

tem_w = w(ones(3,1),:); 
tem_w1 = w1(ones(3,1),:);
tem_w2 = w2(ones(3,1),:);
C1 = (p1 - tem_w1.*p./tem_w)./tem_w;
C2 = (p2-2*tem_w1.*C1-tem_w2.*p./tem_w)./tem_w;

Cross_result = cross(C1,C2);
curvature = [];
np = size(C1);
for i = 1:np(2)
    curvature = [curvature,norm(Cross_result(:,i))/(norm(C1(:,i))^3)];

end

  • 0
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值