Python график движения снаряда дает мне прямую линию - PullRequest
0 голосов
/ 19 июня 2020

Вот код, который должен рассчитывать движение, но он создает линию вместо параболы, любая помощь приветствуется.

import math as m
import matplotlib.pyplot as plt
import numpy as np

class Projectile_motion:
    def __init__(self, V_x, V_y, g, delta_time):
        self.gravity = g
        self.V_x = V_x
        self.V_y = V_y
        self.delta_time = delta_time

    def velocity(self, angle):
        self.angle = angle
        self.V_x= m.ceil(self.V_x *m.cos(self.angle))
        self.V_y = m.ceil((self.V_y * m.sin(self.angle))) - (self.gravity * self.delta_time)

    def distance(self, x, y):
        self.x = x
        self.y = y
        self.x = self.x + (self.V_x * self.delta_time)
        self.y = self.y + (self.V_y * m.sin(self.angle)) + (0.5 * self.gravity * ((self.delta_time)**2))
        return self.x, self.y


ww = np.linspace(0, 50, num=5)
for i in ww:
    attempt1 = Projectile_motion(30, 30, 9.8, i)
    attempt1.velocity(1.042)
    ss=attempt1.distance(0, 0)
plt.plot(ss)
plt.show()

Вывод:

1 Ответ

0 голосов
/ 19 июня 2020

Здесь у вас хорошее начало, но вам нужно очистить часть физики в вашей модели.

Если у вас есть V_x и V_y, непонятно, что вы делаете с угол, потому что он уже определен соотношением V_x и V_y.

Я бы посоветовал вам избавиться от угла для начала. Затем вам просто нужно сделать пару вещей с V_y:

  1. Постоянно обновлять V_y, когда вы работаете. Гравитация должна увеличиваться V_y, верно? Щас ваш V_y не обновляется. Оно должно увеличиваться на 9,8 м / с ^ 2, так что это ваше обновление каждый раз
  2. Используйте этот обновленный V_y для расчета расстояния. Итак, после обновления V_y просто используйте это, чтобы изменить положение y. Вы не должны больше заниматься математикой, просто y += V_y*dt

Если у вас все получится, вы можете вернуться к использованию угла (который, как я предполагаю, является вашим начальным направлением) и вычислить V_x и V_y стандартным применением косинуса и синуса по углу. Также помните, что математический модуль хочет angular входных данных в радианах .

...