将球体参数方程乘以 NumPy 中的矩阵,Python
Multiply sphere parametric equation by a matrix in NumPy, Python
我有一个这样定义的球体:
sigma, theta = np.mgrid[0:2*np.pi:60j, 0:np.pi:30j]
x = np.cos(sigma) * np.sin(theta)
y = np.sin(sigma) * np.sin(theta)
z = np.cos(theta)
我正在绘制所述球体如下:
fig = plt.figure()
ax = plt.axes(projection='3d')
ax.plot_surface(x, y, z, label='Unit sphere')
plt.show()
这按预期工作。但是,我需要通过将其参数方程乘以如下生成的 3x3 矩阵来将此球体转换为椭球体:
A1 = np.random.uniform(-1,1,(3,3))
现在,从数学的角度来看,我完全清楚我正在寻找的是我的 x、y 和 z 方程的垂直向量,在矩阵乘法 (@) 中与我的 3x3 相乘变换矩阵。但是,我不知道如何在 numpy 中对其进行编码。提前致谢。
您可以使用理解循环将变换矩阵与每组 x、y、z 相乘
原创
ellipsoid = np.array([np.column_stack((x[i],y[i],z[i])) @ A1 for i in range(60)])
x_ellipsoid = ellipsoid [:,:,0]
y_ellipsoid = ellipsoid [:,:,1]
z_ellipsoid = ellipsoid [:,:,2]
fig = plt.figure()
ax = plt.axes(projection='3d')
ax.plot_surface(x_ellipsoid, y_ellipsoid, z_ellipsoid, label='ellipsoid ')
plt.show()
我有一个这样定义的球体:
sigma, theta = np.mgrid[0:2*np.pi:60j, 0:np.pi:30j]
x = np.cos(sigma) * np.sin(theta)
y = np.sin(sigma) * np.sin(theta)
z = np.cos(theta)
我正在绘制所述球体如下:
fig = plt.figure()
ax = plt.axes(projection='3d')
ax.plot_surface(x, y, z, label='Unit sphere')
plt.show()
这按预期工作。但是,我需要通过将其参数方程乘以如下生成的 3x3 矩阵来将此球体转换为椭球体:
A1 = np.random.uniform(-1,1,(3,3))
现在,从数学的角度来看,我完全清楚我正在寻找的是我的 x、y 和 z 方程的垂直向量,在矩阵乘法 (@) 中与我的 3x3 相乘变换矩阵。但是,我不知道如何在 numpy 中对其进行编码。提前致谢。
您可以使用理解循环将变换矩阵与每组 x、y、z 相乘
原创
ellipsoid = np.array([np.column_stack((x[i],y[i],z[i])) @ A1 for i in range(60)])
x_ellipsoid = ellipsoid [:,:,0]
y_ellipsoid = ellipsoid [:,:,1]
z_ellipsoid = ellipsoid [:,:,2]
fig = plt.figure()
ax = plt.axes(projection='3d')
ax.plot_surface(x_ellipsoid, y_ellipsoid, z_ellipsoid, label='ellipsoid ')
plt.show()