Уравнение графика тела брошенного под углом к горизонту

Различные геометрические алгоритмы.
Admiralisimys
Постоялец
Постоялец
 
Сообщения: 318
Зарегистрирован: 01.06.2009 (Пн) 10:26

Уравнение графика тела брошенного под углом к горизонту

Сообщение Admiralisimys » 17.01.2016 (Вс) 16:06

Добрый день.

Подавляющее большинство результатов поиска приводят к формулам
Изображение
которые строят такой график:
Изображение
Но это всего лишь один из простейших частных случаев.

А как насчёт такого?
Изображение

Эмпирическим можно свести к тому что до первой точки касание всё происходит согласно первой формулы,
а дальше всё согласно формулы амплитудной модуляции
Изображение
с результатом с периода затухания да и ещё в абсолютных (по модулю) значениях.

Но проблема в том что для каждых входных значения (начальная высота, угол, скорость, а в дальнейшем даже масса), нужно будет калибровать константные коэффициенты.

Быть может есть более универсальная формула/система? В каком направлении искать/выводить?

Заранее спасибо за ответ.

P.S.
Во время поиска встречалось упоминание про то что возможно задействуются дифференциальные уравнения.
Вложения
MoveByAngleToHorizont.png
MoveByAngleToHorizont.png (2.31 Кб) Просмотров: 6163
MoveByAngleToHorizontAndLaterJumping.png
MoveByAngleToHorizontAndLaterJumping.png (18.22 Кб) Просмотров: 6163
MoveByAngleToHorizont_Formulas.png
MoveByAngleToHorizont_Formulas.png (9.9 Кб) Просмотров: 6163
MoveAfterFirstTouch_sm.png
MoveAfterFirstTouch_sm.png (13.79 Кб) Просмотров: 6162

Debugger
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1667
Зарегистрирован: 17.06.2006 (Сб) 15:11

Re: Уравнение графика тела брошенного под углом к горизонту

Сообщение Debugger » 17.01.2016 (Вс) 17:31

Это не уравнение тела, брошенного под углом к горизонту. Это, хм, что-то не то.

Ты же хочешь описать по факту несколько движений тела: после каждого удара вектор скорости будет скачкообразно меняться, создавая разрыв. Не знаю, как это решить с помощью диффуров, учитывая это (и сомневаюсь, что возможно), но предложу решение проще.

Пусть тело бросили под углом со скоростью (Vx; Vy) из (0, 0). Ты можешь явно выписать формулу вплоть до точки касания земли X1. В точке касания земли у тела будет скорость (Vx; -Vy). Пусть коэффициент упругости удара будет Q. Тогда, сразу после удара, тело будет находиться на земле, и иметь скорость (Vx; Vy * Q). Как будет себя тело вести дальше? Да так же: эта та же задача про бросок под углом; только скорости и начальная точка будут (Vx; Vy * Q) и (X1; 0) соответственно. Дальше тело будет лететь по параболе до следующего касания, X2; третий отрезок будет решением задачи броска под углом со скоростью (Vx; Vy * Q * Q) из (X2; 0).

У тебя получается явно выписываемая кусочная функция.

Admiralisimys
Постоялец
Постоялец
 
Сообщения: 318
Зарегистрирован: 01.06.2009 (Пн) 10:26

Re: Уравнение графика тела брошенного под углом к горизонту

Сообщение Admiralisimys » 18.01.2016 (Пн) 0:06

Благодарю за идею Debugger.
Математически можно выразить как-то так
Изображение
причём n_max выбирается таким при котором v будет меньше какого минимального значения.

Ну, а к примеру на С#, это будет как-то так:
Код: Выделить всё
using System;
using System.Collections.Generic;

namespace Geometry
{
   public class Curve
   {
      public static readonly double g = 9.81;
      private List<Point> mPoints = null;

      public Curve(Point aPoint0, double aAngle, double aV0)
      {
         mPoints = new List<Point>(1024);

         double Q = 0.5;
         double angle = Angle.toRadians(aAngle);
         Point point = aPoint0;
         double v = aV0;
         int n = 0;
         
         do
         {
            v = aV0 * Math.Pow(Q, n++);
            double maxT = TimeInFly(angle, v);
            double delta = maxT / 10;
   
            for (double t = 0; t < maxT; t += delta)
            {
               mPoints.Add(MovingBodyOnHorizontal(point, angle, v, t));
            }
   
            point = MovingBodyOnHorizontal(point, angle, v, maxT);
            mPoints.Add(point);
         } while(v > 0.1);
      }
      
      public static Point MovingBodyOnHorizontal(Point aPoint0, double aAngle, double aV0, double aTime)
      {
         double x = aPoint0.X + aV0 * aTime * Math.Cos(aAngle);
         double y = aPoint0.Y + aV0 * aTime * Math.Sin(aAngle) - (g * Math.Pow(aTime, 2)) / 2;
         return new Point(x, y);
      }
      
      public static double TimeInFly(double aAngle, double aV0)
      {
         return (2 * aV0 * Math.Sin(aAngle)) / g;
      }
      
      public List<Point> GetPoints()
      {
         return mPoints;
      }
   }
}


Меня всё же смущает не задействование массы.
Или это уже вопрос физического моделирования и тут простой формулой не отделаешься?
Вложения
PiecewiseSolution.png
PiecewiseSolution.png (17.64 Кб) Просмотров: 6148

Debugger
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1667
Зарегистрирован: 17.06.2006 (Сб) 15:11

Re: Уравнение графика тела брошенного под углом к горизонту

Сообщение Debugger » 18.01.2016 (Пн) 0:38

Масса и не должна задействоваться.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16473
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Уравнение графика тела брошенного под углом к горизонту

Сообщение Хакер » 18.01.2016 (Пн) 1:13

Всё-таки это вовсе не алгоритм.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 18.01.2016 (Пн) 4:37

Debugger писал(а):Масса и не должна задействоваться.

Почему? Импульс же массу содержит. Если при ударе поглощается какая-то его часть, то масса должна оказаться в формуле. А если удар абсолютно упругий, то высота отскока будет равна высоте броска - это не тот вариант, который требуется.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Re: Уравнение графика тела брошенного под углом к горизонту

Сообщение alibek » 18.01.2016 (Пн) 9:44

Admiralisimys писал(а):А как насчёт такого?

А что на этом графике означает асимметричность?
Что тело падает медленнее, чем подпрыгивает?
Lasciate ogni speranza, voi ch'entrate.

Debugger
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1667
Зарегистрирован: 17.06.2006 (Сб) 15:11

Re: Уравнение графика тела брошенного под углом к горизонту

Сообщение Debugger » 18.01.2016 (Пн) 19:19

alibek писал(а):
Admiralisimys писал(а):А как насчёт такого?

А что на этом графике означает асимметричность?
Что тело падает медленнее, чем подпрыгивает?

Графики построены по "приблизительной" формуле.

Qwertiy писал(а):
Debugger писал(а):Масса и не должна задействоваться.

Почему? Импульс же массу содержит. Если при ударе поглощается какая-то его часть, то масса должна оказаться в формуле. А если удар абсолютно упругий, то высота отскока будет равна высоте броска - это не тот вариант, который требуется.

Угу. В том-то и дело - "часть". Пусть масса и начальная скорость тела - m и V0; конечная - V1; при ударе остается Q-тая часть импульса. Тогда:
P0 = m * V0
P1 = P0 * Q = m * V1
=>
m * V0 * Q = m * V1

Как видишь, m успешно сокращается. Что вполне ожидаемо: какой бы ты тело массы не бросил, оно упадет за одинаковое время, пренебрегая сопротивлением; логично это продлить это правило и до одинаковой траектории при любой массе тел.

*Так что к формуле ещё фикс: после удара горизонтальная скорость тоже меняется. Поэтому вектор скорости после удара будет (Vx * Q; Vy * Q)

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16473
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Уравнение графика тела брошенного под углом к горизонту

Сообщение Хакер » 18.01.2016 (Пн) 19:26

alibek писал(а):А что на этом графике означает асимметричность?
Что тело падает медленнее, чем подпрыгивает?

Экранный эффект :D .
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.


Вернуться в Геометрия

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

    TopList  
cron