- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
非均匀B样条控制顶点反算
已知曲线数据如下,利用非均匀B样条方法反算控制顶点,再取△t=0.02时,计算该曲线上的点,一阶和二阶矢量,并绘制出点与一阶单位切矢量、点与二阶单位切矢量的图形,打印出计算程序清单。
34.450764.897992.7423
53.213362.910378.7443
72.617458.538964.6679
90.492253.872651.7908
107.626250.252740.0300
124.311548.538229.7099
142.917447.891420.1672
165.059346.123311.5884
187.763341.41425.4394
210.385132.38901.3837
232.500919.6438-0.7049
253.29474.2544-1.1379
程序:
clear
pt=load(data.txt);
m=length(pt);
n=m+1;
k=3;
U=zeros(1,n+k+2);%节点矢量
%********节点矢量************%
x=pt(:,1);
y=pt(:,2);
z=pt(:,3);
temp=zeros(1,m-1);
fori=1:m-1%m个数据点,利用积累弦长法
temp(i)=sqrt((x(i+1)-x(i))^2+(y(i+1)-y(i))^2+(z(i+1)-z(i))^2);
end
fori=1:k+1%前k+1个节点为0
U(i)=0;
end
fori=n+k-1:n+k+2%后k+1个节点为1
U(i)=1;
end
fori=k+1:m+k-1%m个数据点,m=n-1,内节点为m-2个,U(k+1)作为初始值
U(i+1)=U(i)+temp(i-k);%m-1段弦长,U(k+1)到U(m+k)共m个节点
end
fori=k+1:m+k
U(i)=U(i)/U(m+k);
end
%***************反算n+1个控制点**************
dU=zeros(1,n+k+2);%△U
dpt1=[-0.64890.70790.2789];%给定首数据点切矢
dptm=[0.12270.7740-0.6212];%给定末数据点切矢
A=zeros(n-1);
E=zeros(n-1,3);
fori=k+1:n+k+1
dU(i)=U(i+1)-U(i);
end
A(1,1)=1;%切矢条件b1=1,c1=a1=0,e1
E(1,:)=pt(1,:)+(dU(4)/3)*dpt1;
A(n-1,n-1)=1;%切矢条件cn-1=an-1=0,bn-1=0
E(n-1,:)=pt(m,:)-(dU(n+1)/3)*dptm;
fori=2:n-2%a,b,c,e的值
A(i,i-1)=dU(i+3).^2/(dU(i+1)+dU(i+2)+dU(i+3));
A(i,i)=dU(i+3)*(dU(i+1)+dU(i+2))/(dU(i+1)+dU(i+2)+dU(i+3))+...
dU(i+2)*(dU(i+3)+dU(i+4))/(dU(i+2)+dU(i+3)+dU(i+4));
A(i,i+1)=dU(i+2).^2/(dU(i+2)+dU(i+3)+dU(i+4));
E(i,:)=(dU(i+2)+dU(i+3))*pt(i,:);
end
D=A\E;
D=[pt(1,:);D;pt(m,:)];%加上首末端点,控制顶点比数据点多两个
[s,t]=size(D);
%矩阵行数由1开头,故除k和l以外的参数都加1,n本身已加1
dt=0.02;
k=3;
P=[];
dP=[];
ddP=[];
symsx;
%定义节点间的递增变量为变量x
u_0(1:k+1)=0;
fort=k+2:s
u_0(t)=u_0(t-1)+1/(s-k);
end
u_0(s+1:s+k+1)=1;
%求出初始的节点值
%r=0,数据点:
fori=k+1:s
u=u_0;
d=sym(D);
%每次迭代后将d恢复初值
forl=1:k
forj=i-k:i-l
alpha(j)=(x-u(j+l))/(u(j+k
您可能关注的文档
最近下载
- 2025年1月黑龙江高中学业水平合格考数学试卷真题(含答案详解).docx VIP
- 2025年1月黑龙江高中学业水平合格考数学试卷真题(含答案详解).docx VIP
- 影视剧导演聘用合同模板(经纪合同)5篇.docx VIP
- 五年级上册语文习作我的心爱之物人教部编版.ppt VIP
- 鸭人工授精技术.docx VIP
- 01-地质灾害风险调查评价技术要求1:5万(试行).doc VIP
- 注射用血塞通(冻干)临床应用.doc VIP
- 基本药物处方—血塞通注射液、注射用血塞通(冻干).docx VIP
- 2024丽水市遂昌县辅警考试真题及答案.docx VIP
- 2016血塞通注射液临床使用合理性与安全性再评价.pdf VIP
文档评论(0)