Добавить (x, y) координаты к переменной в Matlab l oop для вызова функции - PullRequest
0 голосов
/ 08 января 2020

У меня есть точечная диаграмма из нескольких тысяч точек, которые на ie выше нижней границы, определенной несколькими отрезками. Моя цель - найти кратчайшее расстояние от каждой точки до нижней границы (которая состоит из соединяемых линейных и наклонных отрезков), выше которой лежит точка, и суммировать это расстояние для всех точек для последующей постобработки.

Я нашел онлайновый скрипт функции «точка-линия» (https://www.mathworks.com/matlabcentral/fileexchange/64396-point-to-line-distance), который я тестировал изолированно и теперь хотел бы интегрировать в мой скрипт. Функция принимает массив точек (класс double), таких как [0.1,0.7;0,0.5;...], а также принимает две [x,y] точки, которые l ie на линии, до которой рассчитывается кратчайшее расстояние.

Пока Я написал while l oop, который перебирает все строки в наборе данных, уже сохраненных в рабочей области (за исключением нулей, которые я хотел бы игнорировать). Затем я использую вложенный if l oop, чтобы проверить, находится ли данная точка в диапазоне x данного нижнего граничного сегмента (я всегда хочу вычислить кратчайшее расстояние до нижнего граничного сегмента, выше которого лежит данный pt) и, наконец, я пытаюсь добавить данную (x,y) координату точки к переменной, которая станет одним из входов функции. Две точки, которые определяют нижний граничный сегмент линии, жестко закодированы для каждого сегмента и не изменяются.

Вот фрагмент моего кода:

short_deviation = 0;
idx = 1;
while idx <= numel(my_data(:,5)) && not(my_data(idx,5) == 0)
    ...
    if my_data(idx,5) < my_data(2,9) && my_data(idx,5) > my_data(1,9) % check that pt is in x range of lower segment
        pt(:,idx) = my_data(idx,3:4); % CURRENT ERROR - Try to append given pt to list for function input
        v1 = my_data(1,9:10); % two hard coded x,y pts which lie on lower boundary to which I want the distance
        v2 = my_data(2,9:10);
        distance_2D(idx) = point_to_line_dist(pt, v1, v2); % calling function
    end
    ...
    idx = idx + 1;
end

Когда я запускаю текущий код, я получаю следующее сообщение об ошибке:

Невозможно выполнить назначение, потому что размер левой стороны - 1 на 1, а размер правой стороны - 1 на 2.

Ошибка в My_script (строка xxx)
pt(:,idx) = my_data(idx,3:4);

Теперь, когда я пишу этот код, я думаю, что еще одна потенциальная ошибка заключается в том, что я вызываю функцию distance_2D внутри if l oop - я также не уверен, что синтаксис для вызова функции правильно (мало опыта здесь), но я не дошел до этого пункта из-за предыдущей ошибки, которую я упомянул.

1 Ответ

1 голос
/ 08 января 2020

Ошибка указывает, что pt ранее был неправильного размера. Чтобы ваш код выполнялся, он должен иметь две строки, иначе данные не поместятся. Вы можете использовать

pt=zeros(2,numel(my_data(:,5)))

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...