2

matlabのFILL関数を使用すると、直線エッジを持つポリゴンによって制限された塗りつぶされた領域が作成されます。

ここに画像の説明を入力してください

残念ながら、これにより上の図に小さな白い領域が残ります。これは、塗りつぶしたい領域の境界が直線エッジのポリゴンではなく、左側に湾曲した境界があるためです。曲線があり(ほぼ放物線ですが、正確ではありません)、2本の水平線と曲線自体の間の領域を塗りつぶしたいと思います。また、MATLAB関数IMFILLも調べましたが、運がありませんでした。

4

1 に答える 1

2

あなたがする必要があるのは、より多くの角を持つポリゴンを作成して、それがよりスムーズにカーブにフィットするようにすることです。

%# create a parabola and two straight lines
x = -3:0.1:3;
y = x.^2/4;
plot(x,y)
hold on, plot([-3 3],[1 1],'r',[-3 3],[2 2],'r')

%# create a polygon that hugs the parabola
%# note that we need to interpolate separately
%# for positive and negative x
x1 = interp1(y(x<0),x(x<0),1:0.1:2);
%# interpolate in reverse so that the corners are properly ordered
x2 = interp1(y(x>0),x(x>0),2:-0.1:1);

%# fill the area bounded by the three lines
fill([x1,x2],[1:0.1:2,2:-0.1:1],'g')

ここに画像の説明を入力してください

于 2012-08-29T01:06:26.470 に答える