我正在尝试在参数模式下进行迭代,以根据函数绘制多个同心圆,参数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个相同的重叠弧的图。我还用
replot
替换了plot
,只保留了最后一个弧。我知道“迭代不适用于参数模式下的绘图”(请参考手册中的“绘图”),但这使用的是
do for
构造。一定有办法做到这一点!怎么样?系统:gnuplot版本5.2补丁程序级别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)]
。