Постройте кривую в 3D с помощью Sympy

Как построить следующую 3D-кривую (в качестве примера) с помощью Sympy? Я знаю, что просто создаю массив для t и делаю это в Matplotlib, но на самом деле я не хочу строить эту кривую, а скорее хочу научиться определять и строить кривые символически.

альфа (t) = (cos (t), sin (t), t)

from sympy import *

t = symbols('t')
alpha = [cos(t), sin(t), t]

# now what?

Я пытался использовать метод графика различными способами, но это привело либо к трем отдельным 1D-кривым, либо к ошибке.


person Mark    schedule 11.08.2017    source источник
comment
Сначала изучите этот docs.sympy.org/latest/modules/plotting.html. .   -  person swatchai    schedule 11.08.2017


Ответы (2)


Вы должны использовать методы из sympy.plotting, в вашем случае вам нужно plot3d_parametric_line:

from sympy import *
from sympy.plotting import plot3d_parametric_line

t = symbols('t')
alpha = [cos(t), sin(t), t]
plot3d_parametric_line(*alpha)

или plot3d_parametric_line(cos(t), sin(t), t, (t, 0, 2*pi)), если вы хотите установить пределы t.

введите описание изображения здесь Посмотрите другие примеры для построения 3D-графики с помощью sympy: https://github.com/sympy/sympy/blob/master/examples/beginner/plot_examples.py

person Serenity    schedule 11.08.2017

Я никогда не пробовал рисовать в sympy

Я подозреваю, что больше будет иметь опыт работы с matplotlib

lambdify() — это интерфейс между символическими выражениями и обычными функциями.

from sympy import *
from sympy.utilities.lambdify import lambdify
import math

t = symbols('t')
alpha = [cos(t), sin(t), t]

f = lambdify(t, alpha)

T = [2*math.pi/100*n for n in range(100)]
F = [f(x) for x in T]

import matplotlib.pyplot as plt
import mpl_toolkits.mplot3d.axes3d as axes3d

fig1, ax1 = plt.subplots(subplot_kw=dict(projection='3d'))
ax1.plot(*zip(*F))
ax1.set_aspect('equal')
plt.show()

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

person f5r5e5d    schedule 11.08.2017
comment
К сожалению, этот ответ устарел. Это определение alpha приводит к ошибке AttributeError: 'Zero' object has no attribute 'cos'. С alpha = [2*t, 3*t, t] предпоследняя строка ведет к NotImplementedError: It is not currently possible to manually set the aspect on 3D axes, который описан здесь. - person claudio; 28.06.2020