У меня есть точечная диаграмма из нескольких тысяч точек, которые на 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 - я также не уверен, что синтаксис для вызова функции правильно (мало опыта здесь), но я не дошел до этого пункта из-за предыдущей ошибки, которую я упомянул.