You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 16:40:18