Вопрос по plot, figures, graphics, matlab-figure, matlab – Как мне заполнить область между двумя линиями и кривой, которая не является прямой в MATLAB (область не является многоугольником)

1

Использование функции FILL в matlab создает заполненную область, ограниченную многоугольником с прямыми краями:

enter image description here

К сожалению, это оставляет небольшую белую область на рисунке выше, потому что граница области, которую я хочу заполнить, не является многоугольником с прямыми краями, а имеет изогнутую границу на левой стороне. У меня есть кривая (почти параболическая, но не совсем), и я хочу заполнить область между двумя горизонтальными линиями И самой кривой. Я также изучил функцию MATLAB IMFILL, но безуспешно.

Извините, когда я написал, что попробовал IMREAD, я имел в виду IMFILL. Я отредактировал вопрос. user1271772
пытатьсяimfill chaohuang

Ваш Ответ

1   ответ
1

Вам нужно сделать многоугольник с большим количеством углов, чтобы он более плавно вписывался в кривую:

%# 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')

enter image description here

Спасибо! Я думал о создании многоугольника с большим количеством углов, но не смог бы сделать это так быстро, если бы не ваше предложение использовать interp1 =) Было бы неплохо, если бы в качестве входных данных я мог бы просто дать кривую и линии и иметь функцию, которая заполняет пространство между этими областями, но, возможно, MATLAB не имеет такой встроенной функции. user1271772

Похожие вопросы