我正在使用 python 2.7,交互式笔记本。
当我绘制这段代码时...
plt.xlabel('Frame')
plt.ylabel('Iterations')
x = np.arange(-10000., 10000., 1)
y = (np.rint((-np.sin(x/88)+x*0.0027)*26.2))-5
y = np.clip(y, 0, 200)
plt.axis([0, 1500, -4, 100])
plt.plot(x, y, linewidth=0.5, color='g')
plt.grid()
plt.show()
我得到了一个非常平滑的图表。
在这里看到
但是当我将它应用到我试图平滑改变的迭代次数时,使用以下代码四舍五入到最接近的整数:
frame_i = 1
nrframes = 1500
for i in xrange(frame_i, nrframes):
actualiter = (-np.sin(frame_i/88)+frame_i*0.0027)*26.2 #Iteration Bouncy Curve
actualiter = np.clip(actualiter, 0, 200)
plt.plot([frame_i],[actualiter], 'ro')
plt.axis([0, 1500, 0, 100])
frame_i = frame_i + 1
plt.show()
我在这里看到一个非常参差不齐的输出
有人知道为什么吗?我的一些其他函数在我的代码中用于计算数字时也“看起来”非常“参差不齐”
y = -(cos(x/10)*0.007)+0.0029
y = -(cos(x/25)*1)
最佳答案
在您的第一个示例中,x
是一个 float ,因此 (x/88)
产生一个 float ,并且您有一个连续变量 sin 函数:
[sin(0.114), sin(0.227), sin(0.341)...等]
在你的第二个中,frame_i
是一个 int,所以 (frame_i/88)
被执行为整数除法,因此你的 sin 函数有步骤:
[sin(0), sin(0), .... , sin(0), sin(1), sin(1), ... 等]
将 88
更改为 88.0
会强制进行浮点除法,您会再次获得平滑的正弦波。
关于Python:方程图平滑但给出 'jagged' 输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31565901/