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 円弧