2016-01-26 7 views
12

यहां, मेरे पास एक पैरामीट्रिक समीकरण है।पायथन - कुछ बिंदुओं पर वेग और त्वरण वैक्टर प्लॉटिंग

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

t = np.linspace(0,2*np.pi, 40) 

# Position Equation 
def rx(t): 
    return t * np.cos(t) 
def ry(t): 
    return t * np.sin(t) 

# Velocity Vectors 
def vx(t): 
    return np.cos(t) - t*np.sin(t) 
def vy(t): 
    return np.sin(t) + t*np.cos(t) 

# Acceleration Vectors 
def ax(t): 
    return -2*np.sin(t) - t*np.cos(t) 

def ay(t): 
    return 2*np.cos(t) - t*np.sin(t) 

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

z = t 
ax1.plot(rx(z), r(z), z) 
plt.xlim(-2*np.pi,2*np.pi) 
plt.ylim(-6,6) 
ax.legend() 

तो मैं इस पैरामीट्रिक समीकरण है कि इस ग्राफ बनाता है।

![enter image description here

मैं अपने कोड में ऊपर मेरे वेग और त्वरण पैरामीट्रिक समीकरणों को परिभाषित किया है।

जो मैं करना चाहता हूं वह परिभाषित बिंदुओं पर ऊपर मेरे स्थिति ग्राफ में त्वरण और वेग वैक्टरों को साजिश करना है। (Id est, टी = pi/2, 3pi/2, 2pi)

कुछ इस तरह:

Python/matplotlib : plotting a 3d cube, a sphere and a vector?

लेकिन मैं के बाद से मैं प्रत्येक बिंदु टी को परिभाषित करने के लिए है सीधे आगे और अधिक कुछ करना चाहता हूँ दो समीकरणों में।

ऐसी चीज संभव है? मैं केवल वेक्टर फ़ील्ड ढूंढ सकता हूं और क्या नहीं।

ऐसा कुछ। enter image description here

धन्यवाद।

संपादित प्रश्न

# t = pi/4 

t_val_start_pi4 = np.pi/4 
vel_start_pi4 = [rx(t_val_start_pi4), ry(t_val_start_pi4), t_val_start_pi4] 

vel_end_pi4 = [rx(t_val_start_pi4) + vx(t_val_start_pi4), ry(t_val_start_pi4)+vy(t_val_start_pi4), t_val_start_pi4 ] 

vel_vecs_pi4 = (t_val_start_pi4 , vel_end_pi4) 

vel_arrow_pi4 = Arrow3D(vel_vecs_pi4[0],vel_vecs_pi4[1], vel_vecs_pi4[2], mutation_scale=20, lw=1, arrowstyle="-|>", color="b") 

axes.add_artist(vel_arrow_pi4) 

यह मुझे कह Tuple out of index

+0

निम्नलिखित शो कैसे तीर आकर्षित करने के लिए। एक बार जब आप वेक्टर पूंछ के स्थान की गणना करते हैं, वेक्टर की लंबाई, वेक्टर की दिशा, और वेक्टर की शैली पर निर्णय लेते हैं, तो आप वेक्टर को आकर्षित करने के लिए इसका उपयोग कर सकते हैं: http://matplotlib.org/examples/pylab_examples/arrow_simple_demo.html – boardrider

+0

ताकि क्या पहला शून्य पूंछ के स्थान का प्रतिनिधित्व करता है और अगला वाला वैक्टर लंबाई का प्रतिनिधित्व करता है? 'ax.arrow (0, 0, 0.5, 0.5, head_width = 0.05, head_length = 0.1, fc = 'k', ec = 'k')' – DarthLazar

+0

@ डार्थलाजार - कृपया [दस्तावेज़ीकरण] देखें (http: // matplotlib उस विधि के लिए .org/api/axes_api.html # matplotlib.axes.Axes.arrow) –

उत्तर

4

मैं इस तरह लग रहा है करीब है एक त्रुटि दे देंगे ... यहां तक ​​कि नमूना चित्र :)

मैच के लिए रंग मिल गया

मैं ध्रुवीय निर्देशांक पर साजिश के साथ बहुत अनुभवी नहीं हूं, हालांकि (ज्यादातर तीसरे आयाम t समन्वय पर भ्रमित)।

उम्मीद है कि इस में मदद मिलेगी और आप यह पता लगाने सकता है यह

मैं ले लिया कि आपने क्या खाया विस्तार करने के लिए कैसे, this answer से Arrow3D वर्ग जोड़ा, और t से कुछ नमूना मूल्यों से अधिक के लिए लूप एक सरल गयी।

#draw a vector 
from matplotlib.patches import FancyArrowPatch 
from mpl_toolkits.mplot3d import proj3d 

class Arrow3D(FancyArrowPatch): 
    def __init__(self, xs, ys, zs, *args, **kwargs): 
     FancyArrowPatch.__init__(self, (0,0), (0,0), *args, **kwargs) 
     self._verts3d = xs, ys, zs 

    def draw(self, renderer): 
     xs3d, ys3d, zs3d = self._verts3d 
     xs, ys, zs = proj3d.proj_transform(xs3d, ys3d, zs3d, renderer.M) 
     self.set_positions((xs[0],ys[0]),(xs[1],ys[1])) 
     FancyArrowPatch.draw(self, renderer) 

axes = fig.gca(projection='3d') 

t_step = 8 
for t_pos in range(0, len(t)-1, t_step): 
    t_val_start = t[t_pos] 
#  t_val_end = t[t_pos+1] 

    vel_start = [rx(t_val_start), ry(t_val_start), t_val_start] 
    vel_end = [rx(t_val_start)+vx(t_val_start), ry(t_val_start)+vy(t_val_start), t_val_start] 
    vel_vecs = list(zip(vel_start, vel_end)) 
    vel_arrow = Arrow3D(vel_vecs[0],vel_vecs[1],vel_vecs[2], mutation_scale=20, lw=1, arrowstyle="-|>", color="g") 
    axes.add_artist(vel_arrow) 

    acc_start = [rx(t_val_start), ry(t_val_start), t_val_start] 
    acc_end = [rx(t_val_start)+ax(t_val_start), ry(t_val_start)+ay(t_val_start), t_val_start] 
    acc_vecs = list(zip(acc_start, acc_end)) 
    acc_arrow = Arrow3D(acc_vecs[0],acc_vecs[1],acc_vecs[2], mutation_scale=20, lw=1, arrowstyle="-|>", color="m") 
    axes.add_artist(acc_arrow) 

axes.plot(rx(t), ry(t), t) 
plt.xlim(-2*np.pi,2*np.pi) 
plt.ylim(-6,6) 

vectors

+0

यीशु दोस्त, यह अद्भुत है। धन्यवाद। त्वरित सवाल, मैं टी के कुछ बिंदुओं पर तीरों की साजिश के बारे में कैसे जाउंगा? जैसे, मैं तीरों को साजिश करने के लिए इस संख्या के लिए टी का चयन करता हूं। मैं इसके बारे में कैसे जाउंगा? – DarthLazar

+0

मैं अपने प्रश्न का एक नमूना – DarthLazar

+1

के एक संपादित हिस्से में अपना नमूना डालूंगा, आपके वेग वैक्टर 'vel_vecs_pi4' के लिए गलत हैं, आपको' vel_vecs' –

संबंधित मुद्दे