Как построить параметрическую кривую без использования `plot3d_parametric_line`

#python #matplotlib #plot #sympy

#python #matplotlib #построить #симпатия

Вопрос:

Идея состоит в том, чтобы построить кривую : C(t) = (1 cos(t))i (1 sin(t))j (1 -sin(t)-cos(t))k . Следуя инструкциям в модуле Plot в https://docs.sympy.org/latest/modules/plotting.html можно получить его, используя plot3d_parametric_line :

Способ 1:

 %matplotlib notebook
from sympy import cos, sin
from sympy.plotting import plot3d_parametric_line
t = sp.symbols('t',real=True)
plot3d_parametric_line(1   cos(t), 1   sin(t), 1-sin(t)-cos(t), (t, 0, 2*sp.pi))
 

введите описание изображения здесь

Хотя это допустимый метод , есть и другой способ построить его без использования plot3d_parametric_line » но ax.plot » . Что я пробовал:

Способ 2:

 fig = plt.figure(figsize=(8, 6))
ax = fig.gca(projection='3d')
ax.set_xlim([-0.15, 2.25])
ax.set_ylim([-0.15, 2.25])
ax.set_zlim([-0.75, 2.50])

ax.plot(1 sp.cos(t),1 sp.sin(t),1-sp.sin(t)-sp.cos(t))
plt.show()
 

Но TypeError: object of type 'Add' has no len() появляется…

Как я могу это исправить, чтобы получить ту же кривую, что и при использовании метода 1?

Спасибо

Ответ №1:

Вы можете использовать 3D-график matplotlib после определения линейной сетки NumPy и вычисления ваших переменных x, y, z

 import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

fig = plt.figure()
ax = fig.gca(projection='3d')

t = np.linspace(0, 2*np.pi, 100)
x = 1   np.cos(t)
y = 1   np.sin(t)
z = 1 - np.sin(t) - np.cos(t)

ax.plot(x, y, z)

plt.show()
 

введите описание изображения здесь