Вторник, 26 Ноября 2024, 00:04

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Траектория полета ядра
ilgamerДата: Суббота, 08 Сентября 2012, 10:10 | Сообщение # 1
Needle Games
Сейчас нет на сайте
Code
for(int i=0; i<100; i+=1)
{
     x = V0*cos(mouseAngle)*i-g*i*i/2;
     y = V0*sin(mouseAngle)*i;

     DrawSprite(L"dot.png",x,y);
}


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

Дело в том, что в учебнике рассматривается создание этого проекта в Delphi, где систему координат преображают в математическую.
Как сделать чтобы траектория отрисовывалась из левого нижнего угла (0,600)?

Заранее спасибо!




Сообщение отредактировал ilgamer - Суббота, 08 Сентября 2012, 10:10
ArchidoДата: Суббота, 08 Сентября 2012, 10:58 | Сообщение # 2
Сэнсэй
Сейчас нет на сайте
ilgamer
Гм, может как-то так?:

Code

for(int i=0; i<100; i+=1)   
   {   
       const int X0 = 0;
       const int Y0 = 600;

       x = X0 + V0*cos(mouseAngle)*i-g*i*i/2;   
       y = Y0 + V0*sin(mouseAngle)*i;   

       DrawSprite(L"dot.png",x,y);   
   }


C++ - он особенный. С помощью него можно не только выстрелить себе в ногу, но и повеситься в пустой комнате:)

Сообщение отредактировал Archido - Суббота, 08 Сентября 2012, 10:58
ilgamerДата: Суббота, 08 Сентября 2012, 11:51 | Сообщение # 3
Needle Games
Сейчас нет на сайте
Изменил код:
Code
for(int i=0; i<100; i+=1)
{
     t = x/V0*cos(-mouseAngle);
     x = (V0*cos(-mouseAngle))*i;
     y = Y0+(V0*sin(-mouseAngle))*i-g*t*t/2;

     DrawSprite(L"dot.png",x,y);
}


Результат




Сообщение отредактировал ilgamer - Суббота, 08 Сентября 2012, 13:37
TovTripleZДата: Суббота, 08 Сентября 2012, 13:59 | Сообщение # 4
Злая ящерка >:3
Сейчас нет на сайте
ilgamer, а оно так и должно - в небо падать? Или ядро падает с высоты? Или оно летит вверх, а потом опускается?

Бледные дрыщекролики следят за вами
ilgamerДата: Суббота, 08 Сентября 2012, 15:16 | Сообщение # 5
Needle Games
Сейчас нет на сайте
Ядро в любом случае опускактся. Мне и нужно чтобы траектория была дугообразной и оба ее конца были направленны вниз

ArchidoДата: Суббота, 08 Сентября 2012, 15:59 | Сообщение # 6
Сэнсэй
Сейчас нет на сайте
В формуле ты там чего-то наворотил лишнего, попробуй сделать так:
Code

   const float X0 = 0.0f;   
   const float Y0 = 600.0f;

   float t = 0.0f;
   float Angle = mouseAngle * PI / 180;  //угол должен быть в радианах

   x =  X0 +  V0 * cos(Angle) * t;   
   y =  Y0 +  V0 * sin(Angle)  * t - g*t*t / 2;

   ...

   //а далее в какой-нить ф-ции Update делаем что-нить типа:

   t += 0.05f; //коэффициент зависит от того, сколько раз в секунду вызывается данный код


C++ - он особенный. С помощью него можно не только выстрелить себе в ногу, но и повеситься в пустой комнате:)

Сообщение отредактировал Archido - Суббота, 08 Сентября 2012, 16:01
ilgamerДата: Воскресенье, 09 Сентября 2012, 03:43 | Сообщение # 7
Needle Games
Сейчас нет на сайте
Ничего не изменилось sad

ArchidoДата: Воскресенье, 09 Сентября 2012, 04:43 | Сообщение # 8
Сэнсэй
Сейчас нет на сайте
ilgamer
А вообще сама траектория похожа на правду? Еще дело может быть в V0 и в mouseAngle, как получаешь этот угол?

Вот простой примерчик наваял (курсор мыши задает угол, левая кнопка "запускает" спрайт), посмотри.


C++ - он особенный. С помощью него можно не только выстрелить себе в ногу, но и повеситься в пустой комнате:)

Сообщение отредактировал Archido - Воскресенье, 09 Сентября 2012, 06:22
ilgamerДата: Воскресенье, 09 Сентября 2012, 10:26 | Сообщение # 9
Needle Games
Сейчас нет на сайте
На правду то похожа. Даже дальность полета верно просчитывается.

Получаю угол так:
Code
double mouseAngle = atan2(mouseX-600,mouseX)


Спасибо за пример!




Сообщение отредактировал ilgamer - Воскресенье, 09 Сентября 2012, 10:30
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг