Esempio n. 1
0
    def test_greater_cd(self):
        '增大c_d的线性系数,应当使得phi减小'
        solver1 = const.ConstantSolver()
        solver1.set_constants(0.2, 1, 1.225, 5)
        solver1.set_c_d(util.SampleFunction([(0, 0.5), (math.pi / 2, 0.5)]))
        solver1.set_c_l(
            util.SampleFunction([(0, 0), (math.pi / 2, 4 * math.pi / 2)]))
        delta = 0.001
        phi1 = solver1.solve(delta=delta)

        solver2 = const.ConstantSolver()
        solver2.set_constants(0.2, 1, 1.225, 5)
        solver2.set_c_d(util.SampleFunction([(0, 1),
                                             (math.pi / 2, 1)]))  #增大了c_d常量
        solver2.set_c_l(
            util.SampleFunction([(0, 0), (math.pi / 2, 4 * math.pi / 2)]))
        delta = 0.001
        phi2 = solver2.solve(delta=delta)

        self.assertLess(phi2, phi1, "phi should be less when c_d increases")
Esempio n. 2
0
    def test_greater_cl(self):
        '增大c_l的线性系数,应当使得phi增大'
        solver1 = const.ConstantSolver()
        solver1.set_constants(0.2, 1, 1.225, 5)
        solver1.set_c_d(util.SampleFunction([(0, 0.5), (math.pi / 2, 0.5)]))
        solver1.set_c_l(
            util.SampleFunction([(0, 0), (math.pi / 2, 4 * math.pi / 2)]))
        delta = 0.001
        phi1 = solver1.solve(delta=delta)

        solver2 = const.ConstantSolver()
        solver2.set_constants(0.2, 1, 1.225, 5)
        solver2.set_c_d(util.SampleFunction([(0, 0.5), (math.pi / 2, 0.5)]))
        solver2.set_c_l(
            util.SampleFunction([(0, 0), (math.pi / 2, 5 * math.pi / 2)]))
        delta = 0.001
        phi2 = solver2.solve(delta=delta)

        self.assertGreater(phi2, phi1,
                           "phi should be greater when c_l increases")
Esempio n. 3
0
 def test_right_solution(self):
     '求解器得到的结果调用compute方法应该误差在delta内'
     solver = const.ConstantSolver()
     solver.set_constants(0.2, 1, 1.225, 5)
     solver.set_c_d(util.SampleFunction([(0, 0.5), (math.pi / 2, 0.5)]))
     solver.set_c_l(
         util.SampleFunction([(0, 0), (math.pi / 2, 5 * math.pi / 2)]))
     delta = 0.0001
     phi = solver.solve(delta=delta)
     self.assertLessEqual(solver.compute(phi), delta,
                          "solution's function value too big")
Esempio n. 4
0
    def test_strong_wind(self):
        '当风力非常大的时候phi应当与风速无关,只要c_l / c_d 近似等于 tan(phi)即可'
        solver1 = const.ConstantSolver()
        solver1.set_constants(0.2, 1, 1.225, 10000)
        solver1.set_c_d(util.SampleFunction([(0, 0.5), (math.pi / 2, 0.5)]))
        solver1.set_c_l(
            util.SampleFunction([(0, 0), (math.pi / 2, 5 * math.pi / 2)]))
        delta = 0.001
        phi1 = solver1.solve(delta=delta)

        solver2 = const.ConstantSolver()
        solver2.set_constants(0.2, 1, 1.225, 60000)
        solver2.set_c_d(util.SampleFunction([(0, 0.5), (math.pi / 2, 0.5)]))
        solver2.set_c_l(
            util.SampleFunction([(0, 0), (math.pi / 2, 5 * math.pi / 2)]))
        delta = 0.001
        phi2 = solver2.solve(delta=delta)

        self.assertLessEqual(abs(math.tan(phi1) - math.tan(phi2)), 3 * delta,
                             "not constant under strong wind")
Esempio n. 5
0
ydata = []

line, = ax.plot(xdata, ydata, 'r-')
solver = dynamic.DynamicSolver()
alpha = 0
dic_para = {
    'mass':0.05,
    'density':1.225,
    'area':1,
    'c_d':DemoDragFunction(),
    'c_l':DemoLiftFunction(),
    'v_wind':(-5, 0),
}
solver.init(
    mass=dic_para['mass'], density=dic_para['density'], area=dic_para['area'], 
    c_d=dic_para['c_d'],c_l=dic_para['c_l'],
    v_wind=dic_para['v_wind'], v_vertical_0=2, r_0=(-10* math.cos(alpha), 10 * math.sin(alpha)), 
    reader=reader.VReaderSteady()
    )

const_solver = const.ConstantSolver()
const_solver.set_constants(mass=dic_para['mass'], 
    area=dic_para['area'], 
    density=dic_para['density'], 
    v_wind=abs(dic_para['v_wind'][0]))
const_solver.set_c_d(dic_para['c_d'])
const_solver.set_c_l(dic_para['c_l'])
res = const_solver.solve()
print(math.tan(res))
line_ani = animation.FuncAnimation(fig, update_line, 1000, fargs=(xdata, ydata, solver, line, ax), interval=50)
plt.show()