2015-01-02 1 views
2

Я пытаюсь заполнить области между полилинией и горизонтальной линией (которая разрезала эту полилинию в нескольких точках) с помощью Octave/Matlab, но я хочу сохранить только области ниже горизонтальной линии.Заполнить область между полилинией и горизонтальной линией в Matlab/Octave

Это то, что я придумал до сих пор:

x = 0:0.5:6; 
y = [3 2.5 1 1 1 2.5 3 2.5 1 1 1 2.5 3]; 
yline(1:13) = 2; 

figure(1) 
plot(x,y,'k') 

fill([x fliplr(x)],[y yline],'g') 
axis equal 
xlim([-1 7]); 

Я искал в течение нескольких дней, чтобы найти решение, но я только был близок к ответу here, here и here (к сожалению, это последний один только для r-кода).

ответ

3

Вы можете использовать следующий трюк:

  1. заливку нормально, как вы делаете в вашем коде. Не нужно окрашивать края; это будет сделано позже.
  2. Нарисуйте белый прямоугольник patch, чтобы покрыть часть, которую вы не хотите заполнять. Здесь нет края.
  3. Застройте линии над этим.

Код:

x = 0:0.5:6; 
y = [3 2.5 1 1 1 2.5 3 2.5 1 1 1 2.5 3]; 
yline(1:13) = 2; 

figure(1) 

fill([x fliplr(x)],[y yline],'g', 'edgecolor', 'none') 
hold on 
patch([min(x) max(x) max(x) min(x)],[yline(1) yline(1) max(y) max(y)], 'w', ... 
    'edgecolor', 'none') 
plot(x,y,'k') 
plot(x,yline,'k') 
axis equal 
xlim([-1 7]); 

Результирующая фигура:

enter image description here

+1

Круто! Очень хорошо. +1 – rayryeng

 Смежные вопросы

  • Нет связанных вопросов^_^