Учитывая два вектора x
и y
, определяющих ваши линейные сегменты, длина каждого сегмента составляет:
sqrt(diff(x).^2 + diff(y).^2);
и абсолютное значение наклона каждого сегмента (так как это, кажется,то, что вы используете):
abs(diff(y)./diff(x));
Теперь объедините эти два вместе некоторым подходящим способом, чтобы получить метрику, в зависимости от важности каждого из них для вашего приложения.Например, присваивая удвоенный вес наклону:
metric = sqrt(diff(x).^2 + diff(y).^2) + 2*abs(diff(y)./diff(x));
Затем сортируйте по этой метрике:
[~, IX] = sort(metric, 'descend');
IX(1)
будет индексом в вектор сегментов наклонасегмент с наибольшим значением выбранной вами метрики.Его конечными точками являются [x(IX(1)), y(IX(1))]
и [x(IX(1)+1), y(IX(1)+1)]
.Вы можете использовать произвольно сложную функцию уклонов и длин в качестве метрики, если это важно для вашего приложения.Если в вашем приложении возможно, чтобы два значения x
были идентичными, вам необходимо тщательно обработать NaN
s!