Octave尝试保存绘制的椭球图形时Figure窗口无响应
Octave 3D椭球图导出无响应解决方案
核心原因
你设置的nseg=200会生成200×200合计4万个曲面网格,导出eps矢量格式时需要计算并写入海量矢量路径,直接导致窗口无响应,和graphics_toolkit本身兼容性无关。
可直接落地的修改方案
- 方案1:降低曲面离散精度
把nseg参数降低到20~50区间,常规出图精度完全足够,修改后导出速度会提升10倍以上:nseg = 40; % 替换原来的nseg=200即可 - 方案2:保留高精度的前提下调整导出参数
要是必须保留200的网格精度,给print命令加-opengl参数,强制将渲染结果以栅格形式嵌入eps文件,避免矢量路径计算:print (hf, "figure1.eps", "-opengl") - 方案3:换用栅格格式导出
如果不需要后期对eps进行矢量编辑,直接导出为高分辨率png,效率最高也不会出现无响应问题:print (hf, "figure1.png", "-r300") % -r300代表300DPI分辨率,可自行调整 - 方案4:gnuplot适配方案
要是偏好使用gnuplot工具包,先确认安装的gnuplot版本支持3D渲染,启用工具包后再加一行set terminal epslatex再执行导出即可。
修改后可正常运行的完整代码
AR = 2.5; nseg = 40; % 调低离散精度 [X, Y, Z] = ellipsoid(0,0,0,AR/2,0.5,0.5, nseg); hf = figure(); shading interp; surf(X,Y,Z, 'edgecolor','none','facecolor',[.8 .8 .8]); axis equal; %plotcube([AR 1 1],[-AR/2 -0.5 -0.5],.8,[1 0 0]); light('Position', [1 1 1]); view([1, 1., 1]); set(gca,'visible','off'); print (hf, "figure1.eps", "-opengl") % 加opengl参数加速导出
内容的提问来源于stack exchange,提问作者SKPS
相关产品推荐
相关产品推荐

