2015-06-01 6 views
2

Я хотел знать, есть ли способ, которым я могу скрывать этот код в коде np.array. затем добавьте его в link. Я хотел добавить угол, откуда начинается мяч.Есть ли способ, которым я могу использовать np.array в коде

import numpy as np 
import scipy as sp 
from scipy.integrate import ode 
import matplotlib.pylab as pl 
import matplotlib.pyplot as plt 
import math 
from matplotlib import* 
from matplotlib.pyplot import * 
from __future__ import division 
import math 

def projectile_xy(initPos,g,initVel): 
    data_xy = [] 
    initTime = 0.0 
    while True: 

Вычислим высоту у

 y = initPos + (initTime * initVel * math.sin(theta)) - (g * initTime * initTime)/2 

снаряд попал уровне земли

 if y < 0: 
      break 

вычислить расстояние х

 x = initVel * math.cos(theta) * initTime 

добавьте (х, у) кортеж к списку

 data_xy.append((x, y)) 

использовать время с шагом в 0,1 секунды

 initTime += 0.1 
    return data_xy 

g = 9.8 
#h = float(raw_input("Enter the height ")) 
initPos = float(raw_input("Enter the height ")) 
der = float(raw_input("Enter the angle ")) 
#v = float(raw_input("Enter velocity ")) 
initVel = float(raw_input("Enter velocity ")) 


theta = math.radians(der) # radians 
data_der = projectile_xy(initPos,g,initVel) 

найти максимальную высоту ...

point_height_max = max(data_der, key = lambda q: q[1]) 
xm, ym = point_height_max 
x_max = max(data_der)[0] 

print(''' 
Projectile Motion ... 
Using a firing angle of {} degrees 
and a muzzle velocity of {} meters/second 
the maximum height is {:0.1f} meters 
at a distance of {:0.1f} meters'''.format(der, initVel, ym, xm)) 
print "maximum distance" ,(x_max) 

Введите высоту 1 Введите угол 45 Введите скорость 30

Projectile Motion ... 
Using a firing angle of 45.0 degrees 
and a muzzle velocity of 30.0 meters/second 
the maximum height is 24.0 meters 
at a distance of 46.7 meters 
maximum distance 91.2167747731 

ответ

1

Вы можете следовать этому подходу:

import numpy as np 

linear_vel = 20 
ang = np.pi/3 
y=10 
x=12 
g=9.8 
y_vel = linear_vel*np.cos(ang) 
x_vel = linear_vel*np.sin(ang) 


t = (y_vel+np.sqrt(y_vel**2+2*g*y))/g #time when projectile hits    ground 
n= 20 #number of instances of time you want 

time_values = np.linspace(0,int(t),n) 
axes = np.zeros((2,n)) 

for i in range(0,n): 
    axes[0,i]=x_vel*time_values[i] 
    axes[1,i]=y_vel*time_values[i]-0.5*g*time_values[i]**2 



#print time_values 
#print axes 
+0

Вы можете использовать вещание: 'ось [0] = x_vel * time_values' и' оси [1] = y_vel * time_values ​​- 0,5 * г * time_values ​​** 2' и получить избавиться от цикла for. – ryanpattison