Как преобразовать координату в подзаговоре в координату фигуры?

Я пытаюсь нарисовать линии на изображениях в разных сюжетах. Основная идея заключается в использовании annotationСпасибо за этот вопрос на SO.

Вот скрипт на Mathworks File Exchange, но он не работает на современных версиях MATLAB и не работает на axis image,

1 ответ

Я нахожу ответ сам.

Обратитесь к этому файлу на обмене файлами Mathworks.

Это требует много неприятных сложных расчетов и преобразований. Предоставлено Benoît Valley

Сначала получите конфиг фигуры,

% get axes properties
funit=get(get(h_axes,'Parent'),'Units');
% get axes properties
aunit=get(h_axes,'Units');
darm=get(h_axes,'DataAspectRatioMode');
pbarm=get(h_axes,'PlotBoxAspectRatioMode');
dar=get(h_axes,'DataAspectRatio');
pbar=get(h_axes,'PlotBoxAspectRatio');
xlm=get(h_axes,'XLimMode');
ylm=get(h_axes,'YLimMode');
xd=get(h_axes,'XDir');
yd=get(h_axes,'YDir');

% set the right units for h_axes
set(h_axes,'Units',funit);
axesoffsets = get(h_axes,'Position');

x_axislimits = get(h_axes, 'xlim');     %get axes extremeties.
y_axislimits = get(h_axes, 'ylim');     %get axes extremeties.
x_axislength = x_axislimits(2) - x_axislimits(1); %get axes length
y_axislength = y_axislimits(2) - y_axislimits(1); %get axes length

и наконец

xfigure = xab+xwb*(xaxes-x_axislimits(1))/x_axislength;

Почему я не использую код генерации?

Generate code дает мне такие вещи:

% Create line
annotation(figure1,'line',[0.223214285714286 0.694642857142857],...
    [0.552380952380952 0.630952380952381]);

Что не связано с существующими линиями, точками или фигурами, не говоря уже о переменных, не нанесенных на график. Так что в основном я ищу способы получить эти точечные позиции в этом annotation координаты, которые рассматриваются в приведенном выше коде.

Если бы я не понял вас, ребята, как правильно использовать generate codeПожалуйста, дайте мне знать.

Другие вопросы по тегам