我正在尝试在参数模式下进行迭代,以根据函数绘制多个同心圆,参数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)/ia(i)=sqrt(2)/30*(31-i)进行了一些数学调整。

输出:

plot - 根据函数进行t测距的迭代和参数模式-gnuplot-LMLPHP

用于输出该图片的设置为

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)]

10-07 19:28
查看更多