Модераторы: Rickert

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Падающий мяч 
:(
    Опции темы
sSilence
  Дата 27.5.2009, 20:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 27.5.2009

Репутация: нет
Всего: нет



Здраствуйте. 
Подскажите как сделать мяч который падает с определенной высоты, по законам гравитации и отскакивает.
я не могу (понять, сделать) цикл, по которому, мяч должен падать и отпрыгивать 
все должно происходить по формуле at^2+yt+y(0) 
или еще как... подскажите, можно только цикл. 

Спасибо.

Не откажусь и от примера)

Это сообщение отредактировал(а) sSilence - 27.5.2009, 21:46
PM MAIL   Вверх
Mazzi
Дата 28.5.2009, 09:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Правильный
**


Профиль
Группа: Комодератор
Сообщений: 825
Регистрация: 3.4.2003

Репутация: 4
Всего: 21



Делай так.

Задай переменные: скорость, расстояние до земли.

Исходное положение: скорость == 0, расстояние == N

цикл_пока (расстояние > 0) {
     скорость++;
     расстояние--;
     рисуем_мяч();
}

цикл_пока (скорость > 0) {
     скорость--;
     расстояние++;
     рисуем_мяч();
}

Примитивно, но для иллюстрации сгодится.


--------------------
Мне нужны помощники.
PM MAIL WWW   Вверх
Bitter
Дата 28.5.2009, 11:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный лентяй
***


Профиль
Группа: Завсегдатай
Сообщений: 1209
Регистрация: 15.8.2004
Где: Харьков, Ukraine

Репутация: 5
Всего: 27



Нет, не сгодится.

На разных машинах это будет работать по разному. Вот праильная схема:

1. понадобятся три 64 битные переменные (t1, t2, f)
2. При старте Вызываем API QueryPerfomanceCounter(t2);   // Количество тиков на данный момент времени
3. При старте Вызываем API QueryPerformanceFrequency(f); // Частота процессора
3. Тело программы

 While (!Stop)
 { 
    QueryPerfomanceCounter(t1);
    deltaT = (t1 - t2) / f;
    if (deltaT>0.1)  // Скорость работы не быстрее  0.1 секунды
   { 
      QueryPerfomanceCounter(t2);
      Speed += g*deltaT;
      if (Координата_шарика_Y>0)   Координата_шарика_Y + = Speed;
      else Speed = -1; // -1 это значение с потолка, то есть 1 метр в секунду вверх
   }
  
 }

4. переменная g это ускорение свободного падения = 9.822

Типы всех переменных, думаю интуитивно понятны
PM MAIL ICQ Skype   Вверх
Rickert
Дата 28.5.2009, 11:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ситхи не пройдут!
****


Профиль
Группа: Комодератор
Сообщений: 3356
Регистрация: 11.7.2006
Где: Лакрима

Репутация: 6
Всего: 52



Люди не гоните, скорость не может задаваться постоянным значением. Она должна расчитываться исходя из разницы во времени между сменой кадра.


--------------------
Ни что не внушает сна крепче, чем день приисполненный трудов!
PM MAIL WWW Skype GTalk   Вверх
Bitter
Дата 28.5.2009, 11:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный лентяй
***


Профиль
Группа: Завсегдатай
Сообщений: 1209
Регистрация: 15.8.2004
Где: Харьков, Ukraine

Репутация: 5
Всего: 27



Rickert, а я что написал?
PM MAIL ICQ Skype   Вверх
Mazzi
Дата 28.5.2009, 11:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Правильный
**


Профиль
Группа: Комодератор
Сообщений: 825
Регистрация: 3.4.2003

Репутация: 4
Всего: 21



Я показал всего лишь иллюстрацию, без подробностей.


--------------------
Мне нужны помощники.
PM MAIL WWW   Вверх
Bitter
Дата 28.5.2009, 11:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный лентяй
***


Профиль
Группа: Завсегдатай
Сообщений: 1209
Регистрация: 15.8.2004
Где: Харьков, Ukraine

Репутация: 5
Всего: 27



Что же она иллюстрирует? Что мяч должен опускаться вниз, а потом подниматься вверх что ли? Думаю автор сам понимает что значит "падает" и "отскакиваает"
PM MAIL ICQ Skype   Вверх
sSilence
Дата 30.5.2009, 20:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 27.5.2009

Репутация: нет
Всего: нет



госпада.
все еще проще чем кажется,

Код

float y=0;
float v0=0;
float y0=4;
float t=0;
float a=9.8;
float v=0;
...
// тут он падает собственно по формуле
 t=t + 0.001;
  v=a*(t*t)+y*v0;
  y=a*(t*t)+v*t+y0;

//тут начинается должен самый геморой... который хрен знает ккакой




PM MAIL   Вверх
Bitter
Дата 30.5.2009, 22:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный лентяй
***


Профиль
Группа: Завсегдатай
Сообщений: 1209
Регистрация: 15.8.2004
Где: Харьков, Ukraine

Репутация: 5
Всего: 27



Цитата(sSilence @  30.5.2009,  20:40 Найти цитируемый пост)
t=t + 0.001;  v=a*(t*t)+y*v0;  y=a*(t*t)+v*t+y0;


это вобще не понятно что
цифры какие-то от балды... лажа. Попробуй запусти на машине в 233 Мг и на машине с 4мя ядрами...

Цитата(sSilence @  30.5.2009,  20:40 Найти цитируемый пост)
все еще проще чем кажется


Цитата(sSilence @  30.5.2009,  20:40 Найти цитируемый пост)
тут начинается должен самый геморой... который хрен знает ккакой


это называется проще? Я тебе реальное решение показал. Ну как знаешь...

Это сообщение отредактировал(а) Bitter - 30.5.2009, 22:57
PM MAIL ICQ Skype   Вверх
Rickert
Дата 31.5.2009, 05:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ситхи не пройдут!
****


Профиль
Группа: Комодератор
Сообщений: 3356
Регистрация: 11.7.2006
Где: Лакрима

Репутация: 6
Всего: 52



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


--------------------
Ни что не внушает сна крепче, чем день приисполненный трудов!
PM MAIL WWW Skype GTalk   Вверх
ksnk
Дата 31.5.2009, 08:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 2
Всего: 386



Rickert, Хм... А зачем считать какие-то такты ЦП? Картинка должна изменяться не менее чем 20 раз в секунду. Вот они "такты" и  есть! Ставить delay/slip/timeout по вкусу, пусть процессор сам считает свои такты...


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
Rickert
Дата 31.5.2009, 15:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ситхи не пройдут!
****


Профиль
Группа: Комодератор
Сообщений: 3356
Регистрация: 11.7.2006
Где: Лакрима

Репутация: 6
Всего: 52



Цитата(ksnk @  31.5.2009,  08:35 Найти цитируемый пост)
Rickert, Хм... А зачем считать какие-то такты ЦП?

Вот и я спрашиваю: зачем Bitter их считает?

Цитата(ksnk @  31.5.2009,  08:35 Найти цитируемый пост)
Картинка должна изменяться не менее чем 20 раз в секунду. Вот они "такты" и  есть! Ставить delay/slip/timeout по вкусу, пусть процессор сам считает свои такты...

Почему именно 20? Почему не 33? Не 1567?

Это сообщение отредактировал(а) Rickert - 31.5.2009, 15:46


--------------------
Ни что не внушает сна крепче, чем день приисполненный трудов!
PM MAIL WWW Skype GTalk   Вверх
ksnk
Дата 31.5.2009, 15:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 2
Всего: 386



Rickert, В кино, к примеру, частота кадров - 24 кадра в секунду. Вполне реалистичная картинка получается. Зачем пересчитывать чаще и тратить такты процессора, которые можно потратить на что-то нужное...


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
Rickert
Дата 1.6.2009, 05:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ситхи не пройдут!
****


Профиль
Группа: Комодератор
Сообщений: 3356
Регистрация: 11.7.2006
Где: Лакрима

Репутация: 6
Всего: 52



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


--------------------
Ни что не внушает сна крепче, чем день приисполненный трудов!
PM MAIL WWW Skype GTalk   Вверх
Mazzi
Дата 1.6.2009, 09:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Правильный
**


Профиль
Группа: Комодератор
Сообщений: 825
Регистрация: 3.4.2003

Репутация: 4
Всего: 21



Цитата(Bitter @ 28.5.2009,  11:48)
Что же она иллюстрирует? Что мяч должен опускаться вниз, а потом подниматься вверх что ли? Думаю автор сам понимает что значит "падает" и "отскакиваает"

топикстартер написал

"я не могу (понять, сделать) цикл, по которому, мяч должен падать и отпрыгивать"

вот это и иллюстрирует. Читайте внимательней пожалуйста.


--------------------
Мне нужны помощники.
PM MAIL WWW   Вверх
Страницы: (3) Все [1] 2 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Программирование игр, графики и искуственного интеллекта"
Rickert

НА ЗЛОБУ ДНЯ: Дорогие посетители, прошу обратить внимание что новые темы касающиеся новых вопросов создаются кнопкой "Новая тема" а не "Ответить"! Любые оффтопиковые вопросы, заданные в текущих тематических темах будут удалены а их авторы, при рецедиве, забанены.

  • Литературу, связанную с программированием графики, обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы связанные с программированием графики и мультимедии на языках С++ и Delphi
  • Вопросы по реализации алгоритмов рассматриваются здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rickert.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Программирование игр, графики и искусственного интеллекта | Следующая тема »


 




[ Время генерации скрипта: 0.0592 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.