为什么这个抛物面不是正确的形状?
Why is this paraboloid not the correct shape?
我正在尝试使用 pyplot 创建一个圆形抛物面(向下开口)来近似某些点,但我担心我可能遗漏了一些基本的东西,因为形状没有看对了
相关代码如下:
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.cm as cm
from mpl_toolkits.mplot3d import Axes3D
# here is a function to calculate the z for a (x,y) pair
def get_z(x,y,width,height):
# opens downward
c = - float(height)
# circular so same width in both directions
x2 = (x ** 2) / float(width)
y2 = (y ** 2) / float(width)
z = (x2+y2) / c
return(z)
# and here a function that does the plotting based on the xs and the ys
def plot_par(axes,xs,ys,zero_x=0,zero_y=0,width=1,height=100):
zs = np.array([])
for x in xs:
for y in ys:
# need to subtract the zero to center the surface
zs=np.append(zs,get_z(x-zero_x,y-zero_y,width,height))
Z = zs.reshape(len(xs),len(ys))
X,Y = np.meshgrid(xs, ys)
axes.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap=cm.coolwarm,linewidth=0, antialiased=False)
这是一个例子。我已经尽我所能地旋转了轴,但仍然看不到抛物面;看起来其中一个轴 (carga_final
) 正在产生常数值:
有人看到这里有什么明显的错误吗 and/or我该如何解决?如图所示,我尝试减去中间值(最大值 + 最小值 / 2),但这并没有解决问题。
它工作正常,问题是因为你的 x 轴和 y 轴的长度不同。
例如,使用下面的线 (x = 0-100, y = 0-500
) 似乎与您的轴限制相匹配,您会在 y 方向上得到一个略微弯曲的表面:
plot_par(ax,np.arange(0,100,1),np.arange(0,500,5),zero_x=50, zero_y=250)
但是,如果您的 x
和 y
范围相同,它看起来会更好:
plot_par(ax,np.arange(0,100,1),np.arange(0,100,1),zero_x=50, zero_y=50)
我正在尝试使用 pyplot 创建一个圆形抛物面(向下开口)来近似某些点,但我担心我可能遗漏了一些基本的东西,因为形状没有看对了
相关代码如下:
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.cm as cm
from mpl_toolkits.mplot3d import Axes3D
# here is a function to calculate the z for a (x,y) pair
def get_z(x,y,width,height):
# opens downward
c = - float(height)
# circular so same width in both directions
x2 = (x ** 2) / float(width)
y2 = (y ** 2) / float(width)
z = (x2+y2) / c
return(z)
# and here a function that does the plotting based on the xs and the ys
def plot_par(axes,xs,ys,zero_x=0,zero_y=0,width=1,height=100):
zs = np.array([])
for x in xs:
for y in ys:
# need to subtract the zero to center the surface
zs=np.append(zs,get_z(x-zero_x,y-zero_y,width,height))
Z = zs.reshape(len(xs),len(ys))
X,Y = np.meshgrid(xs, ys)
axes.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap=cm.coolwarm,linewidth=0, antialiased=False)
这是一个例子。我已经尽我所能地旋转了轴,但仍然看不到抛物面;看起来其中一个轴 (carga_final
) 正在产生常数值:
有人看到这里有什么明显的错误吗 and/or我该如何解决?如图所示,我尝试减去中间值(最大值 + 最小值 / 2),但这并没有解决问题。
它工作正常,问题是因为你的 x 轴和 y 轴的长度不同。
例如,使用下面的线 (x = 0-100, y = 0-500
) 似乎与您的轴限制相匹配,您会在 y 方向上得到一个略微弯曲的表面:
plot_par(ax,np.arange(0,100,1),np.arange(0,500,5),zero_x=50, zero_y=250)
但是,如果您的 x
和 y
范围相同,它看起来会更好:
plot_par(ax,np.arange(0,100,1),np.arange(0,100,1),zero_x=50, zero_y=50)