Форум программистов, компьютерный форум, киберфорум
Наши страницы
Алгоритмы
Войти
Регистрация
Восстановить пароль
 
psinetron
8 / 8 / 5
Регистрация: 24.01.2012
Сообщений: 61
1

Параметры тела брошенного под углом

13.12.2018, 12:40. Просмотров 258. Ответов 3

Приветствую!
Стыдно признать, но появились проблемы с довольно простым алгоритмом.
Итак - задача следующая - у нас есть некое тело, брошенное под углом к горизонту. Нужно рассчитать его параметры в каждый момент времени.
Просто рассчитать траекторию можно использую формулу:
Название: chart6.png
Просмотров: 12

Размер: 7.3 Кб

Ну и код, который правильно выводит данные:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
private static final float GRAVITY = 9.81f; //Сила гравитации
private static int count = 1;
 
public static void main(String[] args) {
        getNextDot(10.0f, 10.0f, GRAVITY, 1.0f);
    }
 
 
    /* Расчет вертикального положения тела через 1 сек
     *
     * @param u - начальная скорость тела (м/с)
     * @param a - угол под которым брошено тело
     * @param g - сила гравитации
     * @param t - время движения (с)
     */
    public static void getNextDot(float u, float a, float g, float t) {
        float x = (float) (u * t * (Math.cos(Math.toRadians(a))));
        float y = (float) (u * t * Math.sin(Math.toRadians(a)) - ((g * (t * t)) / 2));
        System.out.print(count);
        System.out.print(": x = ");
        System.out.print(Math.round(x * 1000.0) / 1000.0);
        System.out.print("; y = ");
        System.out.println(Math.round(y * 1000.0) / 1000.0);
        count++;
        if (count < 10) {
            //Variant 1
            getNextDot(u, a, g, t + 1f);
        }
    }
На выходе мы получаем правильные данные:
Кликните здесь для просмотра всего текста
1: x = 9.848; y = -3.169
2: x = 19.696; y = -16.147
3: x = 29.544; y = -38.936
4: x = 39.392; y = -71.534
5: x = 49.24; y = -113.943
6: x = 59.088; y = -166.161
7: x = 68.937; y = -228.19
8: x = 78.785; y = -300.028
9: x = 88.633; y = -381.677


Но теперь хочется переделать функцию так, чтобы t всегда был равен 1. А параметры u и a рассчитывались одинаково. Т.е. как будто через каждую новую секунду мы текущую точку считаем за первую, и просто пересчитываем угол броска и силу броска.

Пытаюсь для начала пойти от обратного. Скорость тела в любой момент времени направлена по касательной к траектории движения (параболе) и равна:
Название: image034_0.png
Просмотров: 11

Размер: 4.1 Кб
В коде это получится так:
Java
1
float newU = (float) Math.sqrt((x * x) + (y * y))
Вот тут уже начинается первая неточность. Значение получается не точное (должно быть 10), но похожее (10.345247) Допустим.

а вот дальше нам нужно получить угол броска уже от текущей позиции. Формула выглядит так:
Название: image036.png
Просмотров: 12

Размер: 523 байт
Вроде как угол должны получить так:
Java
1
float newA = (float) Math.toDegrees(Math.atan(y/x))
И вот тут у меня что-то не сходится. Значение очень сильно отличается от стартового (должно быть 10, а выходит 17)

Что не так считаю? в идеале должно получиться так:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
    /* Расчет вертикального положения тела через 1 сек
     *
     * @param u - начальная скорость тела (м/с)
     * @param a - угол под которым брошено тело
     * @param g - сила гравитации
     * @param t - время движения (с)
     */
    public static void getNextDot(float u, float a, float g, float t) {
        float x = (float) (u * t * (Math.cos(Math.toRadians(a))));
        float y = (float) (u * t * Math.sin(Math.toRadians(a)) - ((g * (t * t)) / 2));
        System.out.print(count);
        System.out.print(": x = ");
        System.out.print(Math.round(x * 1000.0) / 1000.0);
        System.out.print("; y = ");
        System.out.println(Math.round(y * 1000.0) / 1000.0);
        count++;
        if (count < 10) {
            float newU = ...formula1...
            float newA = ...formula2...
            getNextDot(newU, newA, g, t);
        }
    }
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.12.2018, 12:40
Ответы с готовыми решениями:

Движение тела, брошенного под углом к горизонту
Здравствуйте было задание: построить траекторию полета тела массой 1 кг, брошенного по углом 45...

Движение тела, брошенного под углом к горизонту
нужно выполнить задание на платформе Wolfram: движение тела, брошенного под углом к горизонту....

Движение тела , брошенного под углом к горизонту
Здравствуйте , нужно помощь в редактирование кода. Анимация движения шара, тело не летит по...

Движение тела, брошенного с высоты под углом
Доброго времени суток! Очень прошу помочь разобраться с задачей. Заранее благодарна за любую...

Полет тела, брошенного под углом к горизонту
Реализация модели «Полет тела, брошенного под углом к горизонту» Помогите,пожалуйста, переделать...

3
Excalibur921
809 / 495 / 88
Регистрация: 12.10.2013
Сообщений: 3,256
13.12.2018, 13:19 2
ХЗ зачем все это.
Вот тут методичка вроде за 8 класс зная XY цели найти угол и скорость броска.
“В уравнении 11 получается корень из отрицательного числа,”
Движение снаряда по параболе

Расчеты выдают бред, никто не захотел вникать. Пробовал шаманить с уравнениями...ничего.
ТС вообще решил для случая зная только дальность X и ему норм…
Без этих расчетов Angry Birds не сделать.
0
psinetron
8 / 8 / 5
Регистрация: 24.01.2012
Сообщений: 61
13.12.2018, 13:33  [ТС] 3
Нужно для того, чтобы при определенных условиях менять вектор движения объекта.
Почему вы пишите что есть только Х, не вникая в вопрос? Известны все параметры, расчеты параболы ведутся верно. Но необходимо получить не только x и y в каждый момент времени, но и соответствующие им u и a. так чтобы вызвав функцию с новыми параметрами - парабола достроилась бы так, как будто нам известны стартовые условия
0
Excalibur921
809 / 495 / 88
Регистрация: 12.10.2013
Сообщений: 3,256
13.12.2018, 14:06 4
Цитата Сообщение от psinetron Посмотреть сообщение
Почему вы пишите что есть только Х,
В той теме ТС решил…что хватит знать только X, я предложил поискать зная XY цели.
Значит не угадал что хотели.
0
13.12.2018, 14:06
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.12.2018, 14:06

Моделирование полёта тела, брошенного под углом к горизонту
Здравствуйте, мне нужно сделать программу моделирования тела, брошенного под углом к горизонту, с...

Анимация траектории тела,брошенного под углом к горизонту
Помогите,пожалуйста,в создании анимации траектории тела,брошенного под углом к горизонту.Заранее...

Исследовать движение тела, брошенного под углом к горизонту
Движение тела, брошенного под углом к горизонту Исследовать движение тела, брошенного под углом к...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru