Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > разработка игр, графический дизайн и моделирование > Gamedev - cоздание игр: Unity, OpenGL, DirectX
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.05.2011, 12:59   #1
amazaev
Новичок
Джуниор
 
Аватар для amazaev
 
Регистрация: 29.05.2011
Сообщений: 2
По умолчанию Полет снаряда

Реализую полет снаряда. Физикой занимался уже давно, плохо помню все уравнения, вот что есть для расчета траектории полета снаряда:

Код:
// Переменные и константы:
const
  g2 = 9.81 / 2;
var
  P0, P1: TPoint;  
  V: Single;
  X0, Y0, X, Y: Integer;
  a, b, Alpha, VCosA, VSinA, T: Single;
...
// Рассчитываю угол выстрела (P0 - координаты пушки, P1 - координаты, куда смотрит ствол):
        X0 := P0.X;
        Y0 := P0.Y;        
        a := P1.Y - P0.Y;
        b := Sqrt (Sqr (P1.X - P0.X) + Sqr (P1.Y - P0.Y));
        Alpha := ArcSin (a / b);
        if P1.X > P0.X then Alpha := Pi - Alpha;
        T := 0; // начальное время
        VCosA := V * Cos (Alpha);
        VSinA := V * Sin (Alpha);
...
        repeat
          X := Trunc (X0 - T * VCosA);
          Y := Trunc (Y0 + T * VSinA + g2 * Sqr (T));
          // тут отрисовываю снаряд в точке (X, Y)
          T := T + 0.1;
        until (Y > ClientHeight) or (X < 0) or (X > ClientWidth);
Т.е. мы имеет координаты пушки и координаты конца ствола, по которым рассчитываем угол наведения и стреляем. Скорость V постоянна.
Мне надо решить обратную задачу: имея координаты пушки, координаты цели и скорость V найти угол выстрела. Подскажите, как такое сделать?
amazaev вне форума Ответить с цитированием
Старый 29.05.2011, 17:14   #2
Odinok
Пользователь
 
Аватар для Odinok
 
Регистрация: 08.03.2011
Сообщений: 91
По умолчанию

скорость чего? пушки или снаряда?
если снаряда, то вы учтете что может быть такое что решений не будет.

-((y-y_0)/(x-x_0))*2*V^2*f^2+2V^2*f+((y-y_0/(x-x_0))*2*V^2-g*(x-x_0)=0
f=sin(угол)
решаешь это уравнение относительно f и получаешь угол равным arcsin(f)

может где ошибСО

y=y_0-V*sin(угол)*t+(g*t^2)/2
x=x_0+V*cos(угол)*t

x=конечное положение
y=конечное положение
x_0=начальное положение
y_0=начальное положение
V=скорость
t=время
q=константа 9,8
можешь решить эту систему (оси провел как на мониторе слева на право с верху вних
Всё будет так, как должно было быть, даже, если будет наоборот.

Последний раз редактировалось Odinok; 29.05.2011 в 17:54.
Odinok вне форума Ответить с цитированием
Старый 29.05.2011, 19:59   #3
amazaev
Новичок
Джуниор
 
Аватар для amazaev
 
Регистрация: 29.05.2011
Сообщений: 2
По умолчанию

Что-то не получается. Давно математикой занимался, не помню уже.
Вот какая система уравнений есть:
x = x0 - t * v * cos (a);
y = y0 + t * v * sin (a) + g * t ^ 2 / 2.

x, y - координаты цели;
x0, y0 - координаты ствола пушки;
g = 9.81.

В итоге у нас 2 неизвестных:
t - время, когда снаряд достигнет цель;
a - угол, с которым необходимо произвести выстрел, что бы снаряд попал в цель.

Время нас не интересует, поэтому можно от него избавиться:

t = (x0 - x) / (v * cos (a));

Подставляем найденное t во второе уравнение, получаем:

y = y0 + (x0 - x) / (v * cos (a)) * v * sin (a) + g / 2 * ((x0 - x) / (v * cos (a))) ^ 2;
Надо найти a. Попытался это сделать, вот к чему пришел:

(y - y0) / (x0 - x) = (v * sin (a) * cos (a) + g / 2 * (x0 - x)) / (v * cos (a)) ^ 2.

Как от сюда выразить a?
amazaev вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Полет ядра! ilshat09 Помощь студентам 1 15.02.2011 10:58
Траектория полета снаряда... iMax` Общие вопросы C/C++ 7 29.12.2010 07:12
Стандартные средства = бесконечный полет фантазии. Alex Cones Софт 2 27.07.2009 17:10