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

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