суммирование значений уровня из контурного графика - PullRequest
0 голосов
/ 04 мая 2018

Я пытаюсь вычислить сумму значений уровня (ось z) внутри контура: enter image description here

Мне удалось получить линии (или ребра) контура, поэтому у меня есть пределы каждой линии:

enter image description here

Что мне нужно, так это сложить все уровни по оси z контура, которые находятся внутри внешней синей линии на втором графике, чтобы сравнить их с суммой значений за пределами синей линии. Есть какой-либо способ сделать это? Код, который у меня пока есть:

   C = contourc(f, t, abs(tfr));

%extracts info from contour    
    sz = size(C,2);     % Size of the contour matrix c
    ii = 1;             % Index to keep track of current location
    jj = 1;             % Counter to keep track of # of contour lines

    while ii < sz       % While we haven't exhausted the array
        n = C(2,ii);    % How many points in this contour?
        s(jj).v = C(1,ii);        % Value of the contour
        s(jj).x = C(1,ii+1:ii+n); % X coordinates
        s(jj).y = C(2,ii+1:ii+n); % Y coordinates
        ii = ii + n + 1;          % Skip ahead to next contour line
        jj = jj + 1;              % Increment number of contours
    end

1 Ответ

0 голосов
/ 04 мая 2018

Итак, после запуска кода в вопросе у вас есть координаты каждого контура в массиве S. Предполагая, что у вас есть переменные f и t в форме f = 94:0.1:101 и t = 0:1000 или аналогичные, и значение, которое вы хотите суммировать, равно abs(tfr), вы можете использовать

[fg, tg] = meshgrid(f,t)
is_inside = inpolygon(fg,tg, S(1).x, S(1).y)
integral = sum(abs(tfr(is_inside))

И аналогично для других записей в S. См. Справку по inpolygon для получения дополнительных примеров. Вы можете использовать ~is_inside для точек вне кривой

...