文档

rscvn

分段双弧埃尔米特插值

语法

c = rscvn (p u)
c = rscvn (p)

描述

c = rscvn (p u)返回一个平面分段双弧曲线(二次rBform),它依次通过给定的点p (:, j)和的构造方式如下(参见双弧的构造).在任何两个不同的点之间p (:, j)p (: j + 1),曲线通常由两部分组成以第一个弧为起点的连续切线连接的圆弧(包括直线段)p (:, j)正常情况下u (:, j),第二弧线止于p (: j + 1)正常情况下u (: j + 1),并在可能的情况下将两个弧线写成一个。因此曲线处处是切线连续的,除了在曲线有角的重复点处,或者在两段相交的角处p (:, j)在这种情况下,曲线可能在该点有一个尖点。

p必须是一个实矩阵,有两行,至少两列,任意一列必须与至少一个相邻的列不相同。

u必须是一个实矩阵,有两行,列数相同p(有两个例外,见下面),并且可以没有零列。

c = rscvn (p)按下列方法选择法线。为j = 2: end-1u (:, j)向量(标准化,右转)法线的平均值是多少p (:, j) - p (:, j - 1)p (: j + 1) - p (:, j).如果p (: 1) = = p(:,结束),则选择两个端点的法线作为到的法线的平均值p (: 2) - p (: 1)p(:,结束)- p (:, end-1)这样就避免了闭合曲线出现拐角。否则,结束法线是如此选择,只有一个弧在第一个和最后一个线段(not-a-knot结束条件)。

rscvn (p u),u正好有两列,也为时的情况选择内部法线u是缺席但使用的两列u作为端点的法线。

例子

例1。下面的代码只使用四个部分生成一个圆的描述。除了不同的结序列缩放,它是相同的描述,由rsmak(‘圆’,1,(1,1))

P = [1 0 -1 0 1;0 1 0 1 0];c = rscvn ([p (1:) + 1, p (2:) + 1], p);

同样的圆,只是用了两块,由

c2 = rscvn ([0 2 0;1, 1, 1);

例2。下面的代码描绘了两个字母。请注意,第二个字母是只对四个点进行插值的结果。还要注意在绘制第二个字母时的翻译用法。

P = [-1 8 -1 1 -1 -1;3 1.75 .5 -1.25 -3 -3 3];我眼睛= (2);U = i(:,[2 1 2 1 2 1 1]);B = rscvn (p u);S = rscvn([1 -1 1 -1;2.5 2.5 -2.5 -2.5]);fnplt(B), hold on, fnplt(fncmb(S,[3;0])), hold off axis equal, axis off

由圆弧组成的两个字母

例3。下面的代码生成双弧的构造,在下面的讨论中使用这里使用的双圆弧结构。注意fntlr求双弧的开始处、两弧连接处和结束处的切线。

P = [0 1;0 0];u =[。5约;-。25 5];情节(p(1:)、p(2:),“k”),抓住biarc = rscvn (p u);休息= fnbrk (biarc, b);Fnplt (biarc,break (1:2),'b',3), Fnplt (biarc,break (2:3),'r',3) vd = fntlr(biarc,2,break);箭袋(vd (1:), vd (2:), vd (4:), vd(3,:)),推迟

双弧的构造

算法

鉴于两个不同的观点,p1p2,在平面上,相应地,两个非零向量,u1u2,有一个单参数双弧族(即,由两个在连接处有公切线的弧组成的曲线)的起始点为p1正常情况下u1到最后p2正常情况下u2.参数化这组双弧的一种方法是通过法向,v在这一点上在这两条弧的连接处。具有非零v一旦被选中,就只有一个选择,因此整个然后确定双弧。在用于的结构中rscvnv为反射,从p1p2,即向量的平均值u1u2两个向量都标准化了,长度都是1并且都指向这个线段的右边p1p2.这个选择v在两种标准情况下似乎是自然的:(i)u2是对u1从这条线段的垂线p1p2;(2)u1u2是平行的。这个选择的v验证了双弧作为左法线的函数哪个显示了什么时候产生的双弧p1p2,u2 = [.809; .588]都是固定的,只有在p1是允许变化的。

双弧作为左法线的函数

但不可能让插值双弧连续地依赖于所有四个数据,p1p2u1u2.法线方向上必须有一个不连续,u1u2,通过方向从p1p2.这在双弧作为一个端点的函数它显示了当一个点,p1 = (0, 0),和两个正常人,u1 = (1, 1)u2 = (1, 1),保持不变,只有另一点,p2,圆周运动p1

双弧作为一个端点的函数

另请参阅

|

这个话题有用吗?