Нарисуйте функцию с переменной тета в Python - PullRequest
0 голосов
/ 04 февраля 2019

Я новичок в Python, и особенно новичок в построении графиков с использованием matplotlib.Я работаю над заданием, в котором мы должны построить спирографы в декартовой системе координат с уравнениями для x и y:

x = (R + r) * math.cos(theta) - d * math.cos((R+r)*theta/r)
y = (R + r) * math.sin(theta) - d * math.sin((R+r)*theta/r)

, где нам даны значения R, r и d.

Это приводит к ошибке, потому что переменная theta не определена.Я видел способы определения тета с помощью numPy, но нам не разрешено использовать эту конкретную библиотеку для этого назначения.Как лучше всего построить спирографы для 0

Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 04 февраля 2019

Если вы не можете использовать numpy, вы можете сделать это с помощью функций и циклов:

import math
import matplotlib.pyplot as plt

def X(theta,R,r,d) : 
    return (R + r) * math.cos(theta) - d * math.cos((R+r)*theta/r)

def Y(theta,R,r,d) : 
    return (R + r) * math.sin(theta) - d * math.sin((R+r)*theta/r)

nbSamples=100
theta=[]
for i in range (nbSamples) : 
    theta.append(i/(nbSamples-1)*2*math.pi)


x=[]
y=[]    

R=8
r=1
d=3
for th in theta:

    x.append(X(th,R,r,d))
    y.append(Y(th,R,r,d))

plt.plot(x,y)
plt.axis("equal")
plt.show()
0 голосов
/ 04 февраля 2019

Если вы не можете использовать numpy, вы не можете использовать matplotlib;потому что numpy - это зависимость от matplotlib.Поэтому я бы посоветовал решить вашу проблему следующим образом:

Добавьте к вашему решению предложение со словами: «Поскольку numpy является зависимостью от matplotlib, технически невозможно решить эту задачу без использования numpy.не желая, чтобы это ограничение помешало мне решить задачу, я просто предполагаю, что здесь можно использовать numpy. "

Затем перейдем к каноническому решению:

import matplotlib.pyplot as plt
import numpy as np

theta = np.linspace(0,2*np.pi,301)
R = 8
r = 1
d = 3

x = (R + r) * np.cos(theta) - d * np.cos((R+r)*theta/r)
y = (R + r) * np.sin(theta) - d * np.sin((R+r)*theta/r)

plt.plot(x,y)
plt.axis("equal")
plt.show()

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...