使用gnuplot绘制Rankine卵形线流场出现锯齿问题求助
解决Rankine卵形线流线绘制的锯齿问题
我用gnuplot绘制Rankine卵形线的流线时,导入LaTeX后的结果出现了不该有的锯齿。相关代码分为两个.gp文件:
生成数据的cont.gp:
set table "cont.dat" U = 1 s = 1 a = 1 f(x,y)= U*y - U*s*atan((2*a*y)/(x**2+y**2-a**2)) set angles radians set xrange [-4:4] set yrange [-2:2] set zrange [*:*] set cont base set view 0,0 set isosample 200,200 set cntrparam levels incre -2*pi,0.25*pi,2*pi unset surface splot f(x,y)
生成LaTeX绘图文件的plot.gp:
set terminal tikz size 3.5in,2.4in set output "myfig.tex" set xrange [-4:4] set yrange [-2:2] set size 2,1 plot "cont.dat" w l
怀疑是atan函数内部除零导致的异常,正确的流线应该是平滑的闭合曲线,无锯齿。
解决方案
问题根源是普通atan(y/x)无法处理分母为0的情况(即x²+y²=a²的圆周上),且无法自动判断象限,导致函数值跳变产生锯齿。用atan2(numerator, denominator)替代即可解决,同时可通过参数优化让线条更平滑:
1. 修改数据生成代码,替换atan为atan2
修改后的cont.gp:
set table "cont.dat" U = 1 s = 1 a = 1 # 用atan2替代atan,自动处理象限和除零场景 f(x,y)= U*y - U*s*atan2(2*a*y, x**2+y**2-a**2) set angles radians set xrange [-4:4] set yrange [-2:2] set zrange [*:*] set cont base set view 0,0 set isosample 200,200 set cntrparam levels incre -2*pi,0.25*pi,2*pi # 启用B样条插值让等高线更平滑 set cntrparam bspline unset surface splot f(x,y)
2. 优化绘图代码,增加线条平滑
修改后的plot.gp(可选,进一步提升平滑度):
set terminal tikz size 3.5in,2.4in set output "myfig.tex" set xrange [-4:4] set yrange [-2:2] set size 2,1 # 用csplines对线条做平滑处理 plot "cont.dat" w l smooth csplines
内容的提问来源于stack exchange,提问作者very_confused
相关产品推荐
相关产品推荐

