Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

rscvn

区分的 2 円弧エルミート内挿

構文

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

説明

c = rscvn(p,u) は、与えられた点 p(:,j) を順番に通過する平面区分的 2 円弧曲線 (2 次rB 型) を返します。これは、次の方法で作成されます (2 円弧の作成を参照)。2 つの異なる点 p(:,j)p(:,j+1) の間で、曲線は通常 2 つの円弧 (直線部分を含む) で構成されます。2 つの円弧は正接継続で結合され、1 番目の円弧は p(:,j) で始まり u(:,j) に法線があり、2 番目の円弧は p(:,j+1) で終わり u(:,j+1) に法線があります。2 つの円弧は、可能な場合は常に 1 つとして記述されます。そのため、おそらく、曲線が角をもつことがある反復する点、または p(:,j) で終わる 2 つの線分で形成される角度が異常に小さい (この場合は、曲線がその点で先端をもつことがあります) 場合を除き、曲線はすべての場所で正接継続します。

p は、2 行と少なくとも 2 列の実数行列でなければなりません。列は、隣接する 1 つ以上の列と異なっていなければなりません。

u は、2 行と p と同じ列数の実数行列でなければならず (2 つの例外については、以下を参照)、0 の列は保持できません。

c = rscvn(p) は、次の方法で法線を選択します。j=2:end-1 の場合、u(:,j) は、ベクトル p(:,j)-p(:,j-1) および p(:,j+1)-p(:,j) への (正規化された、右折の) 法線の平均です。p(:,1)==p(:,end) の場合、p(:,2)-p(:,1)p(:,end)-p(:,end-1) への法線の平均として両方の端点の法線が選択されるため、結果の閉じた曲線内で角の発生は回避されます。それ以外の場合、端点の法線は、1 番目の線分と最後の線分にわたる円弧が 1 つだけ (節点なしの端点条件) になるように選択されます。

また、u が正確に 2 つの列をもつ rscvn(p,u) も内部法線を選択します。u がないが、u の 2 つの列を端点法線として使用する場合も同様です。

例 1. 以下のコードは 4 つの区分のみを使用して円の説明を生成します。節点シーケンスの異なるスケーリングを除き、rsmak('circle',1,[1;1]) によって提供されるものと同じ説明です。

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

同じ円だが、2 つの区分のみを使用したものは、以下によって提供されます。

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

例 2. 以下のコードは 2 つの文字をプロットします。2 番目の文字が、4 つの点のみへの内挿の結果であることに注意してください。また、2 番目の文字のプロットにおける変換の使用にも注意してください。

p = [-1 .8 -1 1 -1 -1 -1; 3 1.75 .5 -1.25 -3 -3  3];
i = eye(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

円弧で構成される 2 つの文字

例 3. 以下のコードは、ここで使用された 2 円弧作成の以降の説明で使用する2 円弧の作成を生成します。fntlr を使用して、最初、2 つの円弧の結合点、および最後で 2 円弧への正接を求めていることに注意してください。

p = [0 1;0 0];  u = [.5 -.1;-.25 .5];
plot(p(1,:),p(2,:),'k'), hold on
biarc = rscvn(p,u); breaks = fnbrk(biarc,'b');
fnplt(biarc,breaks(1:2),'b',3), fnplt(biarc,breaks(2:3),'r',3)
vd = fntlr(biarc,2,breaks);
quiver(vd(1,:),vd(2,:),vd(4,:),-vd(3,:)), hold off

2 円弧の作成

アルゴリズム

平面内の 2 つの異なる点 p1p2 があり、それに対応する 2 つの非ゼロ ベクトル u1u2 があることを前提に、p1 で始まり u1 への法線をもち、p2 で終わり u2 への法線をもつ 2 円弧 (つまり、結合点で共通の正接をもつ 2 つの円弧から成る曲線) の 1 パラメーター ファミリがあります。この 2 円弧ファミリをパラメーター化する 1 つの方法は、2 つの円弧を結合している点 q における法線方向 v によるものです。非ゼロの v が選択されると、正確に 1 つの q の選択肢が存在するため、2 つの円弧全体が決定されます。rscvn で使用される作成では、v は、長さが 1 で、p1 から p2 までの線分の右側を両方が指すようにベクトル u1u2 が正規化された後で、p1 から p2 までの線分に垂直に交差する、両方のベクトルの平均の鏡映として選択されます。この v の選択は 2 通りの標準のケースでは自然に見えます。(i) u2p1 から p2 までの線分に垂直に交差する u1 の鏡映である場合と、(ii) u1u2 が平行な場合です。この v の選択は左の法線の関数としての 2 円弧によって検証されています。この場合、p1p2、および u2 = [.809;.588] が一定に保たれ、p1 の法線のみが変化可能な場合に、得られた 2 円弧が示されます。

左の法線の関数としての 2 円弧

ただし、内挿する 2 円弧を、p1p2u1u2 の 4 つのデータすべてで継続的に依存させることは不可能です。法線方向 u1 および u2p1 から p2 への方向に通過するため、不連続でなければなりません。これは、1 つの端点の関数としての 2 円弧で示されています。ここでは、1 つの点 p1 = [0;0] と 2 つの法線 u1 = [1;1]u2 = [1;-1] が一定に保たれ、もう 1 つの点 p2 のみが p1 を囲む円上を移動する場合の 2 円弧が示されます。

1 つの端点の関数としての 2 円弧

参考

|