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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 07.06.2009, 13:20   #1
bartislav
 
Аватар для bartislav
 
Регистрация: 24.07.2008
Сообщений: 3
Вопрос Падающий мяч. и.т.д.

Итого, уже хреньте сколько мучаюсь и никак ни могу понять как же это сделать.
Задание такое сделать шарик который падает по законам гравитации и оскакивает естественно) в openGl. сама программа есть а вот цикла, или еще чего, выччисление которое будет ускорять шарик и и делать его отскок не могу. кто чем может помогите, последняя лаба осталась для защиты!!! и у меня экзамен автоматом!!)))
с++ openGl

выкладывыю что сделал сам, что получилось у меня.

Код:
float y=0;
float yy=0.2;
float v0=0;
float t=0;
float a=9.8;
float v=0;
float y0=4;
// тут дальше удет всякая всячина....

void Idle()
{
t=t + 0.001;

 v=-a*(t*t)+y*v0;
 y=-a*(t*t)+ v*t + y0;


//делал так примерно ТОЧНО НЕ ПОМНЮ
if (y=0)
{
t=0;// сбрасываем как бы таймер
v0=-10;

}


//сегодня наклепал второй вариант через синусоиду, доума довести не получилось правда....
( проиходит обратное действие... синусоида увеличивается, вместо угасания
float r=4;
float t=0;
float alptha=0;
...

t=t+0.001;
alpha=alpha + 0.001;
y=-y+r*sin(alpha)/2*t*(-1);
...
или как кто знает, способ реализации
тут правда в основном физика...но думаю поможете,
Спасибо за уделенное внимание.
bartislav вне форума Ответить с цитированием
Старый 07.06.2009, 14:14   #2
OCTAGRAM
Oldschool geek
Форумчанин
 
Аватар для OCTAGRAM
 
Регистрация: 09.03.2009
Сообщений: 611
По умолчанию

Вдобавок к переменным координатам заводятся переменные скорости. Ну а дальше всё просто.
If you want to get to the top, you have to start at the bottom

http://pascal.net.ru/
OCTAGRAM вне форума Ответить с цитированием
Старый 07.06.2009, 16:58   #3
Alter
Старожил
 
Аватар для Alter
 
Регистрация: 06.08.2007
Сообщений: 2,183
По умолчанию

Под Delphi есть, может будет полезным:
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, StdCtrls, Button, Panel;

type
  TForm1 = class(TForm)
    Panel1: TPanel;
    Button1: TButton;
    Shape1: TShape;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
 var
     velocity:real;     {текущая скорость в пикселях}
     nextV:real; {следующее значение скорости}
     c:real;     {коэффициент упругости}
     stopped:boolean;
     lastTop:integer;
begin
    tag:=0;
    shape1.top:=0;
    velocity:=0;
    stopped:=false;
    lasttop:=0;
         with shape1 do
              repeat
                nextv:=velocity+1;
                   If velocity>=0 then
                       Begin
                       if (top+ round(nextv)>=panel1.height-height)
                         then
                          Begin
                           LastTop:=top;
                           top:=panel1.height-height;
                           c:=0.9; {устанавливаем коэффициент упругости}
                           nextv:=-(nextv)*c; {потеря энергии}
                            if nextv>-5 then stopped:=true;
                          end
                           else top:=top+round(nextv);
                           end
                             else {подпрыгивание}
                               Begin
                                If top+round(nextv)<0 then
                                top:=0
                                  else
                               if lasttop>0 then
                                 begin
                                 top:=lasttop;
                                 lasttop:=0;
                                 nextv:=nextv-1;
                                 end
                           else
                            begin
                               top:=top+round(nextv);
                            end;
                  end;
                velocity:=nextv;
                application.processmessages;
                sleep(20); {скорость падения}
             
                 if self.tag>0 then stopped:=true;
              until stopped;
end;

end.
Alter вне форума Ответить с цитированием
Старый 07.06.2009, 19:11   #4
bartislav
 
Аватар для bartislav
 
Регистрация: 24.07.2008
Сообщений: 3
По умолчанию

ппц я делфя воопще незнаю....(
что все равно спасибо, буду разбираться!
bartislav вне форума Ответить с цитированием
Ответ


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