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 つの文字

The image shows the letters B and S.

例 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 円弧の作成

The image shows a curve that is composed of a concave down blue segment and a concave up red segment. The endpoints are labeled p1 and p2. The point at which the segments join is labeled q. The tails of the following three vectors are located at points p1, q, and p2: u1, v, and u2. Each vector points down from the curve.

アルゴリズム

平面内の 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 円弧

The image shows a collection of curves that form a rotated tear shape. The top curve has a concave down segment on the right and a concave up segment on the left. The bottom curve is entirely concave up.

ただし、内挿する 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 円弧

The image shows a collection of curves that overlap in the middle and fan out at the ends. The ends of the curves all lie along the same circle.

参考

|