Умножить сферу параметри c уравнение на матрицу в NumPy, Python - PullRequest
0 голосов
/ 31 марта 2020

У меня есть сфера, определенная таким образом:

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

Это работает, как и ожидалось. Однако мне нужно превратить эту сферу в эллипсоид, умножив ее уравнение параметров c на матрицу 3x3, сгенерированную следующим образом:

A1 = np.random.uniform(-1,1,(3,3))

Теперь, с математической точки зрения, я отлично Помните, что я ищу вертикальный вектор моих уравнений x, y и z, умноженный на матричное умножение (@) с моей матрицей преобразования 3x3. Тем не менее, я не знаю, как кодировать это в numpy. Заранее спасибо.

1 Ответ

0 голосов
/ 31 марта 2020

Вы можете использовать понимание l oop для умножения матрицы преобразования на каждый набор x, y, z

оригинал

enter image description here

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

enter image description here

...