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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

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

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

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 29.12.2008, 23:49   #1
New_Yurok
 
Регистрация: 29.12.2008
Сообщений: 6
По умолчанию 2D шарик по лестнице

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

Задача: смоделировать движение шарика(прыжки) по лестнице(10ступенек к примеру) в 2D, задается вес шарика М, начальная горизонтальная скорость V, высота над первой ступенькой H, длина=высота ступеньки L -вводятся пользователем. Сопротивл воздуха не учитывать, ударение неупругое.
Пишу на 6-ом билдере С++

программа состоит фактически из 2х-3х функций Down(полет шарика вниз) Up(полет вверх) и cick(удар о ступеньку) лесенка на экране статична(ее размер не зависит от L, я маштабирую результаты просчетов и все)
Как я понял загвоздка у меня не в программировании а в физике, вот какие формулы мне дали физики, понимающие в программировании как я в физике...

проекции положения тела на оси
x=x0+v0*t*cos(a0) в моем случае скорость v0 только по горизонту а0=0
y=y0+v0*t*sin(a0)-g*t*t/2 при а0=0, v0*t*sin(a0)=0 стремно

составляющие скорости
vx=v0*cos(a0)
vy=v0*sin(a0)-g*t

результирующая скорость(ваще не знаю кто такая)
v=sqrt(vx*vx+vy*vy)=sqrt(2*v0*v0-2*v0*g*t*sin(a0)+g*g*t*t)

исключая время(что мне как раз и не надо я так думаю) получим ур-е
y=y0+(x-x0)*tg(a0)-g*(x-x0)*(x-x0)/2*v0*v0*cos(a0)*cos(a0)

помогите составить алгоритм используя формулы если какие подходят хотя бы образно програмно я сам наваяю
вот мои примерные функции(не густо сразу скажу) в билдере все так
//все переменные глобальные чтоб не заморачиваться
Код:
void Down ()
{
 while(x0<1025 || y0<769 || x<1025 || y<769)//пока не вылетел за экран
 {
 t++; //или думаю что время надо тикать по долям секунд t=t+0,1
 x=x0+v*t;                  // x и y у меня координаты шарика
 y=y0+v*t-9.81*t*t/2;
 }
};
Up() что то типа того
Код:
// задержка времени где Т_ время задержки в секундах
void Timee ()
{
clock_t delay = T_*CLOCKS_PER_SEC;
clock_t start = clock();
while(clock()- start < delay);
}
но у меня шарик тупо по точкам скачет-тухло, а если скорость задать типа 1 или 2 то ваще в другую сторону летит оно и понятно по формуле

Вобщем кто чем может подскажите, если чего не понятно написал, объясню, заранее спасибо

Модератор: тег CODE

Последний раз редактировалось MaTBeu; 30.12.2008 в 01:25.
New_Yurok вне форума
Старый 30.12.2008, 07:38   #2
New_Yurok
 
Регистрация: 29.12.2008
Сообщений: 6
По умолчанию

я придумал некоторый алгоритм но из-за отсутствия уравнений координат не могу его проверить
M ---> V
.
.
.
H .
.
.
-------*
L |
L |
|______
Чтобы найти точку удара о лестницу произвожу проверку до каждой ступеньки, очевидно что как минимум при 0 или маленькой скорости шарик долетит до первой,те высота H, после прорисовки траектории, кргда шарик упал с высоты H (точка "*" на рисунке), проверяю,если х (координата)>L то полетел вниз еще на L и снова анологичная проверка х с 2*L и тд., если х<L то break из функции Dawn() и переход к Up() (удар и отскок)
Может при падении не брать время а тупо х++ координату, а "y" пересчитывать относительно "х" по последнему уравнению?
Вот думаю а если скорость задаш огроную, тогда шарик вобще горизонтально полетит тогда х++ не годится...
New_Yurok вне форума
Старый 30.12.2008, 07:44   #3
New_Yurok
 
Регистрация: 29.12.2008
Сообщений: 6
По умолчанию

блин пробелы удаляются
M ---> V
\\.
\\\\.
\\\\\\.
H \\\\\.
\\\\\\\\.
\\\\\\\\.
-------*--
||||||||||
LxL |||||||
||||||||||
\\\\\\\\\\\\---------
New_Yurok вне форума
Старый 30.12.2008, 15:31   #4
breate
Пользователь
 
Аватар для breate
 
Регистрация: 30.12.2008
Сообщений: 78
По умолчанию

я не силён в прорисовке, размести всю логику я подумаю может что и подскажу
Моя работа - Создание сайтов
breate вне форума
Старый 30.12.2008, 18:10   #5
New_Yurok
 
Регистрация: 29.12.2008
Сообщений: 6
По умолчанию

задержка с клоком через вайл фуфло, в билдере не катит, точнее прорисовка происходит только последней итерации вайла, а остальное смазывается как фотошоп!!! я через таймер решил делать, посоветовали умные люди
Надо завтра с утра уже сдавать прогу, так что сдам чего есть
New_Yurok вне форума
Старый 30.12.2008, 18:11   #6
New_Yurok
 
Регистрация: 29.12.2008
Сообщений: 6
По умолчанию

как говорится проси других делать а сам не плошай
New_Yurok вне форума
Старый 30.12.2008, 19:27   #7
Mikola-TEAM
Пользователь
 
Регистрация: 31.05.2008
Сообщений: 34
По умолчанию

Вот в Делфи готовая прога.


sharik.rar
Сейчас напишу код для расчёта координат в C++ (только без прорисовки, т.к. C++ только начал изучать)

Последний раз редактировалось Mikola-TEAM; 30.12.2008 в 20:19.
Mikola-TEAM вне форума
Старый 30.12.2008, 19:54   #8
Mikola-TEAM
Пользователь
 
Регистрация: 31.05.2008
Сообщений: 34
По умолчанию

Код:
float x=0, y=0, h=10, xl=10, vy=0;
const float g=9.81, k=0.75, l=10, vx=4, dt=0.1;

//А это вписываем в таймер:
x=x+vx*dt;
vy=vy+g*dt;
y=y+vy*dt;

if (y>=h)
{
   vy=-vy*k;
   y=h;
}

if (x>=xl)
{
   h=h+l;
   xl=xl+l;
}
//И прорисовываем координаты X, Y .

Последний раз редактировалось Mikola-TEAM; 30.12.2008 в 20:38.
Mikola-TEAM вне форума
Старый 31.12.2008, 14:13   #9
New_Yurok
 
Регистрация: 29.12.2008
Сообщений: 6
По умолчанию

Братан ваще выручил, я тут такую ересь заворачиваю уже вторые сутки по500строк,твой код работает,щас координаты подгоню только
Агромное челавеческое спасибо!!!
New_Yurok вне форума
Старый 02.01.2009, 16:21   #10
MaTBeu
Eclipse Foundation
Старожил
 
Аватар для MaTBeu
 
Регистрация: 19.09.2007
Сообщений: 2,604
По умолчанию

Я думаю вопрос снят. Тема закрыта.
MaTBeu вне форума
Закрытая тема


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ШАрик двигается по петли jomix Помощь студентам 3 01.06.2007 12:46