MATLAB绘制矩阵权(Matrix weighted)有理Bezier曲线

本文介绍了一种矩阵权重有理Bezier曲线的绘制方法,该方法由浙江大学杨勋年老师提出,通过引入法向信息来增强曲线的表现力。文中详细阐述了矩阵权重的定义及其实现过程,并给出了MATLAB代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

是根据浙江大学杨勋年老师15年发表的文章Matrix weighted rational curves and surfaces写的博文,这一篇主要是绘制矩阵权(Matrix weighted)有理Bezier曲线。
在上一篇博文讲述了有理Bezier曲线之后,杨老师对其进行了扩展,并赋予其几何意义,将法向信息加以考虑得到矩阵权的有理Bezier曲线,定义为

Q(t)=[i=0nMiBi,n]1i=0nMiPiBi,n(t), t[0,1]

其中 Bi,n(t)=n!i!(ni)!ti(1t)ni 是Bernstein基
存在很多种定义矩阵权的方法,这里采用一种几何上比较直观的方法定义。假设对于 ni,i=0,1,,n 是一族单位法向量并且 ωi>0,μi>1,i=0,1,,n 是一族实数,对于 Q(ξ) 矩阵权定义如下
Mi=ωi(I+μininTi),i=0,1,,n

其中I是 d×d 的单位阵
这样就可以进行矩阵权有理Bezier曲线的绘制了
这里对文中的图1(a)还原,这里所有的 ωi 都是1,除去 μ2,μ5,μ8 取20之外所有的 μi 都是1

矩阵权有理Bezier曲线

整个的MATLAB代码如下

function  normal_bezier
%NORMAL_BEZIER 此处显示有关此函数的摘要
%   此处显示详细说明
N=[2 0.8;1 0;7 -1;10 1;0 1;0 1;0 1;-10 1;-7 -1;-1 0;-2 0.8]';
vertices = [-1 6;-0.75 5;-1.2 2.5;-1.6 1;-1 0;0 0;1 0;1.6 1;1.2 2.5;0.75 5;1 6]';
NumPoint=size(vertices,2)-1;%点的个数
M=cell(1,NumPoint+1);

for i=1:NumPoint+1
 niu(i)=1;
 omega(i)=1;
end
niu(3)=20;niu(6)=20;niu(9)=20;

for i=1:NumPoint+1;
S=sqrt(N(1,i)^2+N(2,i)^2);
N(1,i)=N(1,i)/S;
N(2,i)=N(2,i)/S;
end

I=[1 0;0 1];
for i=1:NumPoint+1
M{i}=omega(i)*(I+niu(i)*N(:,i)*N(:,i)');
end

xx=[];
yy=[];


for t=0.001:0.001:0.999
    Mat=[0;0];
    invMat=[0 0;0 0];
    for j=0:NumPoint
        w=factorial(NumPoint)/(factorial(j)*factorial(NumPoint-j))*(1-t)^(NumPoint-j)*t^(j);
        invMat=invMat+M{j+1}*w;
        Mat=Mat+M{j+1}*vertices(:,j+1)*w;
    end
newPoint = invMat\Mat;
xx=[xx newPoint(1,1)];
yy=[yy newPoint(2,1)];
end


plot(vertices(1,:),vertices(2,:),'b');hold on;
for i=1:NumPoint+1
quiver(vertices(1,i),vertices(2,i),N(1,i),N(2,i),'r','filled','LineWidth',2);
end
hold on;grid on;
axis tight;
axis equal;
xlabel('X');ylabel('Y');
plot(xx,yy,'r');

end

MATLAB制图

整体效果还是不错。再接再厉^^

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

拉风小宇

请我喝个咖啡呗

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值