До сих пор у меня есть 3D-сюжет, который обновляется в реальном времени во время моделирования Monto-Carlo Kessel Run. Я хочу, чтобы график вращался при обновлении, но с флагом rotate3d
, когда я вызываю drawnow
после обновления данных графика, он сбрасывает поворот осей в соответствии с ориентацией по умолчанию, отменяя то, к чему пользователь изменил его. Мой соответствующий код выглядит следующим образом:Обновление участка при сохранении вращения осей?
s = scatter3(pg(:,1), pg(:,2), pg(:,3), 'O', 'filled');
set(s, 'MarkerEdgeColor', 'none', 'MarkerFaceColor', 'k');
hold on
p_x = curr_path(:,1);
p_y = curr_path(:,2);
p_z = curr_path(:,3);
p = plot3(p_x, p_y, p_z);
set(p, 'LineWidth', 2, 'Color', 'k');
p_x = longest.path(:,1);
p_y = longest.path(:,2);
p_z = longest.path(:,3);
p = plot3(p_x, p_y, p_z);
set(p, 'LineWidth', 2, 'Color', 'r');
p_x = shortest.path(:,1);
p_y = shortest.path(:,2);
p_z = shortest.path(:,3);
p = plot3(p_x, p_y, p_z);
set(p, 'LineWidth', 2, 'Color', 'b');
sample_str = sprintf('%d samples', sample);
short_str = sprintf('shortest: %g parsecs', shortest.dist);
long_str = sprintf('longest: %g parsecs', longest.dist);
title(sprintf('%s, %s, %s', sample_str, short_str, long_str));
xlim([-10 10]);
ylim([-10 10]);
zlim([-10 10]);
hold off
drawnow
Это выполняется каждый раз, когда я обновляю данные, нарисованные на графике. Что я могу добавить, чтобы гарантировать, что вращение оси поддерживается во время обновления?
О, это даже лучше, чем решение, с которым я только что придумал. Моя идея состояла в том, чтобы отслеживать «CameraPosition» и «CameraViewAngle» фигуры «CurrentAxes» и устанавливать эти значения обратно, какими они были до этого, но это касается проблемы гораздо более напрямую, спасибо! –
@PatrickRoberts звучит так, как это может работать. Но так как вы можете избежать сбросов вообще, это, конечно, лучше. Изменение «XData' & co. является одним из моих трюков по умолчанию, которые нужно попробовать при обновлении графика или рисования в цикле :) – mikkola