Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 基于变半径函数的三维圆柱体_Python_3d_Surface - Fatal编程技术网

Python 基于变半径函数的三维圆柱体

Python 基于变半径函数的三维圆柱体,python,3d,surface,Python,3d,Surface,我想从一个随半径变化的函数创建一个圆柱体(双曲面)。所以我有一个函数: def f(x): return np.sqrt(1+(x/constant)**(2)) 当然是y方向。我想要的是,这个函数旋转,看起来像一个双曲面(见图)。我创建了这些曲面图,但没有使用类似于f(x)的函数。 我从维基百科上得到了这个脚本: from __future__ import division import numpy as np from numpy import pi, cos, sin, sq

我想从一个随半径变化的函数创建一个圆柱体(双曲面)。所以我有一个函数:

def f(x):
     return np.sqrt(1+(x/constant)**(2))
当然是y方向。我想要的是,这个函数旋转,看起来像一个双曲面(见图)。我创建了这些曲面图,但没有使用类似于f(x)的函数。


我从维基百科上得到了这个脚本:

from __future__ import division
import numpy as np
from numpy import pi, cos, sin, sqrt, outer, ones
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

fig = plt.figure(figsize=(10, 10))
ax = fig.add_subplot(111, projection='3d')
u = np.linspace(0, 2 * pi, 100)
v = np.linspace(0, pi, 100)
one_v = ones(100)


# Hyperboloid
v = 2*v/pi - 1
x3 = 6 * outer(cos(u), sqrt(1 + v**2))
y3 = 6 * outer(sin(u), sqrt(1 + v**2)) - 16
z3 = 12 * outer(one_v, v)
ax.plot_surface(x3, y3, z3, rstride=5, cstride=5, cmap='Spectral',
                linewidth=0.5)

# Fix aspect ratio and axes details
ax.set_xlim(-13, 13)
ax.set_ylim(-13, 13)
ax.set_zlim(-13, 13)
ax.view_init(elev=35, azim=-45)
plt.axis('off')
plt.savefig('Gaussian curvature.svg', transparent=True)
plt.show()

但我不知道如何实现我的功能。我想要我的函数和旋转。我这样做了,但它不是100%正确。在x,y=0时,函数应为=w0*np.sqrt(1)=w0=1.701。事实并非如此

import numpy as np
from numpy import pi, cos, sin, sqrt, outer, ones
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

fig = plt.figure(figsize=(10, 10))
ax = fig.add_subplot(111, projection='3d')
u = np.linspace(0, 2 * pi, 100)
v = np.linspace(0, pi, 100)
one_v = ones(100)

w0=1.701
lamb=0.90846
d_in1=45
foc1=38.35
zR=np.pi*w0**(2)/(lamb)


x=np.linspace(-30,30,100)
def f(x):
    return w0*np.sqrt(1+(x/zR)**(2))

# Hyperboloid
v = 2*v/pi - 1
x3 = 6 * outer(cos(u), sqrt(1 + v**2))
y3 = 6 * outer(sin(u), sqrt(1 + v**2)) 
z3 = f(x)
ax.plot_surface(x3, y3, z3, rstride=5, cstride=5, cmap='Spectral',
                linewidth=0.5)

# Fix aspect ratio and axes details
#ax.set_xlim(-13, 13)
#ax.set_ylim(-13, 13)
#ax.set_zlim(-13, 13)
#ax.view_init(elev=35, azim=-45)
#plt.axis('off')
plt.savefig('Gaussian curvature.svg', transparent=True)
plt.show()

那么,您是如何创建此曲面图的呢?您的函数
f(x)
应该位于您下面所述示例中的
z3
处。请帮助我:)