到目前爲止,我有一個3d實時更新的凱塞爾運行的蒙託卡羅模擬。我希望繪圖在更新時可以旋轉,但啓用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
每當我更新繪圖中的數據時,都會執行此操作。我可以添加什麼以確保在更新期間保持軸旋轉?
哦,這比我剛剛提出的解決方案更好。我的想法是跟蹤圖的'CurrentAxes'的'CameraPosition'和'CameraViewAngle',並將這些值重新設置爲之前的值,但這更直接地解決了問題,謝謝! –
@PatrickRoberts聽起來像這樣也可以。但既然你可以完全避免重置,那當然更好。修改'XData'&co。是在更新繪圖或循環繪製時嘗試嘗試的默認技巧之一:) – mikkola