Как преобразовать координату в подзаговоре в координату фигуры?
Я пытаюсь нарисовать линии на изображениях в разных сюжетах. Основная идея заключается в использовании 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
Пожалуйста, дайте мне знать.