我正在尝试在参数模式下进行迭代,以绘制多个同心圆弧,其中参数 t
根据函数变化。我已经尝试过,除其他外,
a=sqrt(2)
plot [-pi/2:pi/2] a*cos(t), a*sin(t)
do for [i=2:10] {
a=sqrt(2)/i
set trange [-1./2*acos(-(a**2)/2.):1./2*acos(-(a**2)/2.)]
replot a*cos(t), a*sin(t)
}
我看到的是由 10 个相同的重叠弧组成的图。我还用 plot
替换了 replot
,并且只保留了最后一个弧线。
我知道“迭代不适用于参数模式下的绘图”(引用手册中的“plot for”),但这是使用 do for
构造。一定有办法做到这一点!怎么办?
系统:gnuplot 版本 5.2 patchlevel 2,Windows 10。
最佳答案
今天我开发了自己的解决方案,它是
a(i)=sqrt(2)/30*(31-i)
s(t, i)=t*(1./2*acos(-(a(i)**2)/2.))/(pi/2)
set trange [-pi/2:pi/2]
plot [-pi/2:pi/2] for [j=1:30] a(j)*cos(s(t,j)), a(j)*sin(s(t,j)) lw 2
请注意,同时我做了一些数学调整,从 a=sqrt(2)/i
到 a(i)=sqrt(2)/30*(31-i )
。
输出:
用于输出该图片的设置是
set term wxt size 800,800
set grid
set size ratio -1
set parametric
set xrange [-1.6:1.6]
set yrange [-1.6:1.6]
这背后的基本原理是,通过这种方式,我仅设置 trange 一次,然后通过变量替换将 [0:pi/2]
映射到 [0:s(pi/2,i)]
。
关于plot - 根据函数进行 t 范围迭代和参数模式 - gnuplot,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48994786/