主要内容

飞机上的花键

此示例显示了如何使用SPMAK.SPCRV.CSCVN.RSCVN.来自曲线拟合工具箱™的命令构建平面中的样条曲线。这包括绘制切线并计算由曲线包围的区域。

一个简单的样条曲线

曲线配件工具箱可以处理矢量值花键。D-矢量值单变量样条曲线提供了D-Space中的曲线。在这种模式下,d = 2.最常见,因为它给出了飞机曲线。

这里是一个示例,其中构造和绘制具有二维系数的样条曲线。

结= [1,1:9,9];曲线= spmak(结,repmat([0 0; 1 0; 1 1; 0 1],2,1)。');t = linspace(2,8,121);值= fnval(曲线,t);绘图(值(1,:),值(2,:),'行宽',2);轴([ - 。4 1.4 -.2 1.2]),轴平等的标题('一个样条曲线');抓住

谨慎一句话

你可能已经注意到这个例子没有使用fnplt.要绘制曲线,而是绘制了通过的曲线上的一些点fnval.。这是代码再次:

t = linspace(2,8,121);值= fnval(曲线,t);绘图(值(1,:),值(2,:),'linewidth',2)

使用fnplt.直接与此特定样条曲线曲线给出了下图中的红色曲线。

fnplt(曲线,'r',.5);标题('完整的样条曲线,红色'

说明?

花键是订单4,但结序列中的端部结

结= 1 1 2 3 4 5 6 7 8 9 9

只有多样性2。因此,在基本间隔的端点处,该结序列的所有B样条位为0。这使得曲线开始并停止(0,0)。

一个补救措施

因为在这种情况下,我们真的只在与参数间隔对应的曲线段[3 .. 7]中真的很感兴趣,我们可以使用FNBRK.提取那部分,然后没有难以绘制的,用黄色fnplt.

mycv = fnbrk(曲线,[3 7]);fnplt(mycv,'是',2.5);标题('兴趣的样条曲线,黄色'

这个曲线包围的区域

因为你现在有一个样条曲线,即我的简历,描述曲线(且没有其他),您可以轻松计算此封闭曲线包围的区域,如下所示。

区域= diff(fnval(fnint(......FNCMB(FNCMB(MyCV,[0 1]),'*',fnder(fncmb(mycv,[1 0])))))......),fnbrk(mycv,'间隔'))))
面积= -0.8333.

有一点努力,您可以将其识别为整体的价值

int y(t)d(x(t))= int y(t)dx(t)dt

在样条曲线的基本间隔上我的简历, 和(x(t),y(t)):= fnval(mycv,t)曲线上对应于参数值的点T.。这里,FNCMB(MyCV,[1,0])FNCMB(MyCV,[0,1])描述样条曲线的两个组件,即标量值的样条Xy

此外,曲线大致是具有半径1/2的圆。因此,您将期待一个大致的区域,

DISP(PI / 4)
0.7854

但为什么计算区域消极的?因为曲线封闭的区域在左侧呈左侧,随着曲线的行进,随着曲线的增加T.。要验证这一点,我们绘制了一些切线矢量。

添加一些切线矢量

我们重绘曲线并在某些点绘制切线向量到曲线。

抓住离开fnplt(mycv,'是',2.5);抓住t = 3:.4:6.2;cv = fnval(曲线,t);CDV = FNVAL(FNDER(曲线),T);quivive(cv(1,:),cv(2,:),cdv(1,:),cdv(2,:));标题(“带有一些切线的样条曲线”)轴([ - 。4 1.4 -.2 1.2]),轴平等的

用直线的曲线的交叉点

如果要确定具有直线的该样条曲线的交叉点Y = X.,以下代码会将它们提供给您,并绘制曲线内的直线的段:

切割= fnval(mycv,......平均值(FNZEROS(FNCMB(FNCMB(MYCV,[0,1]),' - ',fncmb(mycv,[1,0])))));情节(削减(1,:),切割(2,:),'是''行宽',2.5)持有离开标题('一个带有一些切线和横跨的样条曲线

SPCRV:控制多边形和相应的样条曲线

样条曲线在产生的图示中广泛使用,其中不需要多于一个粗略想象的形状的平滑曲线。为此,曲线拟合工具箱包含一个特殊命令,SPCRV.,可以独立于工具箱的其余部分使用。

给定飞机中的一系列点,并且可选地,订单K.SPCRV.通过重复的中点结插入,花键曲线的顺序产生K.其控制多边形由给定序列指定。

下图示出了这样的控制多边形,以及顺序3的相应样条曲线。

点= [0 0;1 0;1 1;0 2;-1 1;-1 0;0 -1;0 -2]。';值= SPCRV(点,3);绘图(点(1,:),点(2,:),'K');轴([ -  2 2.25 -2.1 2.2]);抓住绘图(值(1,:),值(2,:),'r''行宽',1.5);传奇({'控制多边形''二次样条曲线'},'地点''se');

请注意,曲线在其中点触摸控制多边形的每个段,并遵循控制多边形概述的形状。

提高订单

提高订单K.将把曲线从控制多边形拉出,使其更顺畅,但也更短。在这里,我们添加了顺序4的相应样条曲线。

value4 = SPCRV(点,4);绘图(Value4(1,:),Value4(2,:),'B''行宽',2);传奇({'控制多边形''二次样条曲线'......'立方样条曲线'},'地点''se');

CSCVN.

另一方面,要获得插值曲线,可以使用CSCVN.命令,提供参数学`自然'立方样条曲线。

fnplt(cscvn(points),'G',1.5);传奇({'控制多边形''二次样条曲线'......'立方样条曲线''插值样条曲线'},......'地点''se');

通过在第二个控制点附近添加点(.95, - 05)(1,0),我们可以创建一个插值的样条曲线,转动在那里更快。

np =尺寸(点,2);fnplt(cscvn([点(:,1)[.95; -.05]点(:,2:np)]),'M',1.5);绘图(.95, -  05,'*');传奇({'控制多边形''二次样条曲线'......'立方样条曲线''插值样条曲线'......“靠近(1,0)'更快},......'地点''se');抓住离开

RSCVN.

您还可以获得由穿过平面中的给定点序列的圆弧组成的切线连续曲线,并且可选地,在点处给定正常方向正交。命令RSCVN.提供这样的曲线。

例如,以下内容生成一个圆圈

C = RSCVN([ -  1 1 -1; 0 0 0],[1 1; 0 0]);

因为它的情节显示。

fnplt(c);轴([ -  1.05 1.05 -1.05 1.05]),轴平等的,轴离开

C是一个二次合理的花键,包括两个碎片,因为以下命令明确。

[表格,订单,休息] = fnbrk(c,'F''o''B'
Form ='rbform'order = 3 breaks = 0 2 4

只需几个数据点即可轻松使用此工具产生醒目模式。例如,这里是贝尔法斯特的乌尔特博物馆的青铜Triskele奖章的设计版本,据说很久以前由圆弧的碎片完成。

pp = [零(1,7);5.4,​​3,6.9,2.75,2.5,.5,5];alpha = 2 * pi / 3;ca = cos(alpha);SA = SIN(alpha);C = [CA SA; -SA CA];d = [0 0 .05 -.05; 1 -1 .98 .98];d = [D C * D];Yin = RSCVN([PP(:,[7,1:3]),C * PP(:,3:4),PP(:3)],D(:,[1 2 1 4 7 5 1]));fnplt(yin),保持,fnplt(fncmb(yin,c)),fnplt(fncmb(yin,c'))yang = rscvn([pp(:,6), -  pp(:,6),pp(:,5),c *PP(:,4)],[D(:,[2 1 1]),C(:,2));FNPLT(阳),FNPLT(FNCMB(阳,C)),FNPLT(FNCMB(阳,C')轴([ -  7.2 7.2 -7.2 7.2]),轴平等的,轴离开, 抓住离开