CYFROWY BARON • PROGRAMOWANIE • Zobacz wątek - Ruch jednostajnie przyspieszony C++

Ruch jednostajnie przyspieszony C++

dział ogólny

Ruch jednostajnie przyspieszony C++

Nowy postprzez bartek » niedziela, 14 sierpnia 2011, 18:26

Serdecznie witam wszystkich użytkowników forum gdyż jestem tu nowy.
Piszę sobie program w c++ w którym pewien obiekt o nazwie Ph1 i ma się poruszać ruchem jednostajnie przyspieszonym i uzyskałem ruch jednostajnie przyspieszony ale problem jest w tym że obiekt Phi po ruchu jednostajnie przyspieszonym po pewnym czasie staje w miejscu.
Oto mój kod:
KOD cpp:     UKRYJ  
int  iElapsTime, iStartTime;

void __fastcall TForm1::Button1Click(TObject *Sender)
{
{
Phi1 = -1;

  if( Timer2->Enabled )
  { /* zatrzymanie zegara */
        Timer2->Enabled = false;
  }
  else
  { /* uruchomienie zegara */
        iStartTime = GetTickCount();
        iElapsTime = 0;
        Timer2->Interval = 10;
        Timer2->Enabled = true;
  }
}

}
//---------------------------------------------------------------------------


void __fastcall TForm1::Timer2Timer(TObject *Sender)
{
  static float i = 0.0;

  if( Phi1 < this->ClientWidth - Phi1)
  {
   Phi1 = Phi1 + i;
  }
  else
  {
        Timer2->Enabled = false;
        Caption = (String)i;
        i = 0.0;
  }

  iElapsTime = GetTickCount() - iStartTime;
  Edit1->Text = FloatToStrF( ((float)iElapsTime)/1000.0, ffFixed, 7, 3) + "    sekund";

  i = ((float)iElapsTime/20000.0);
}
 

Teraz jak zrobić aby obiekt Phi1 po wykonaniu ruchu nie zatrzymywał się w miejscu tylko wyhamował ruchem jednostajnie opóźnionym.
Będę serdecznie wdzięczny za pomoc.
Ostatnio edytowano niedziela, 14 sierpnia 2011, 20:03 przez polymorphism, łącznie edytowano 1 raz
Powód: Kod wstawiaj w znacznik CPP
Avatar użytkownika
bartek
Bladawiec
Bladawiec
 
Posty: 27
Dołączył(a): niedziela, 14 sierpnia 2011, 18:16
Podziękował : 0
Otrzymał podziękowań: 0
System operacyjny: brak systemu
Kompilator: brak kompilatora
Gadu Gadu: 0
    Windows XPFirefox

Re: Ruch jednostajnie przyspieszony C++

Nowy postprzez bartek » wtorek, 16 sierpnia 2011, 19:26

ale otrzymałem mnustwo odpowiedzi
Avatar użytkownika
bartek
Bladawiec
Bladawiec
 
Posty: 27
Dołączył(a): niedziela, 14 sierpnia 2011, 18:16
Podziękował : 0
Otrzymał podziękowań: 0
System operacyjny: brak systemu
Kompilator: brak kompilatora
Gadu Gadu: 0
    Windows XPFirefox

Re: Ruch jednostajnie przyspieszony C++

Nowy postprzez Cyfrowy Baron » wtorek, 16 sierpnia 2011, 20:42

Ruch jednostajnie opóźniony to odwrotność ruchu jednostajnie przyspieszonego, więc wystarczy zmienić algorytm...
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Re: Ruch jednostajnie przyspieszony C++

Nowy postprzez bartek » wtorek, 16 sierpnia 2011, 21:43

No ale jak to zrobić, jak zmienić ten algorytm.
Avatar użytkownika
bartek
Bladawiec
Bladawiec
 
Posty: 27
Dołączył(a): niedziela, 14 sierpnia 2011, 18:16
Podziękował : 0
Otrzymał podziękowań: 0
System operacyjny: brak systemu
Kompilator: brak kompilatora
Gadu Gadu: 0
    Windows XPFirefox

Re: Ruch jednostajnie przyspieszony C++

Nowy postprzez bartek » środa, 17 sierpnia 2011, 21:38

Znowu odpowiedź "Ruch jednostajnie opóźniony to odwrotność ruchu jednostajnie przyspieszonego, więc wystarczy zmienić algorytm..." zamiast pomocy
Avatar użytkownika
bartek
Bladawiec
Bladawiec
 
Posty: 27
Dołączył(a): niedziela, 14 sierpnia 2011, 18:16
Podziękował : 0
Otrzymał podziękowań: 0
System operacyjny: brak systemu
Kompilator: brak kompilatora
Gadu Gadu: 0
    Windows XPFirefox

Re: Ruch jednostajnie przyspieszony C++

Nowy postprzez polymorphism » czwartek, 18 sierpnia 2011, 09:47

Bo widzisz, bartek, gdybyś zamiast narzekać i czekać na gotowe spróbował zrozumieć swój(?) kod, to wiedziałbyś, jak go przerobić.

W skrócie: w czasie hamowania uzyskaną wartość przesunięcia i musisz zmniejszać do zera:
KOD cpp:     UKRYJ  
ih = i - ((float)iElapsTime/20000.0);
if(ih < 0) ih = 0;

W tym przypadku iElapsTime to czas liczony od momentu hamowania.
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows XPFirefox

Re: Ruch jednostajnie przyspieszony C++

Nowy postprzez bartek » piątek, 19 sierpnia 2011, 18:20

Polymorphism ale mi podałeś dwie linijki i i diabła mi to dało bo gdzie niby mam wstawić ten kod bo ja wstawiam go w to miejsce:
KOD cpp:     UKRYJ  
void __fastcall TForm1::Timer2Timer(TObject *Sender)
{
float ih;
  static float i = 0.0;

  if( Phi1 < this->ClientWidth - Phi1)
  {
   Phi1 = Phi1 + i;
  }
  else
  {
        Timer2->Enabled = false;
        Caption = (String)i;
        i = 0.0;
  }

  iElapsTime = GetTickCount() - iStartTime;
  Edit1->Text = FloatToStrF( ((float)iElapsTime)/1000.0, ffFixed, 7, 3) + "    sekund";

  i = ((float)iElapsTime/20000.0);
ih = i - ((float)iElapsTime/20000.0);
if(ih < 0) ih = 0;
}


I po wykonaniu ruchu mój obiekt zatrzymuje się w miejscu a nie wytraca prędkości ruchem jednostajnie opóźnionym.
Faktycznie nie rozumiem gdzie wstawić ten kod to mi pomóż jak umiesz.
Avatar użytkownika
bartek
Bladawiec
Bladawiec
 
Posty: 27
Dołączył(a): niedziela, 14 sierpnia 2011, 18:16
Podziękował : 0
Otrzymał podziękowań: 0
System operacyjny: brak systemu
Kompilator: brak kompilatora
Gadu Gadu: 0
    Windows XPFirefox

Re: Ruch jednostajnie przyspieszony C++

Nowy postprzez bartek » piątek, 19 sierpnia 2011, 21:50

I fajnie po cholere pisałeś polymorphism jak nie działa i nie wiem gdzie to umieścić, niezłą pomoc otrzymałem na forum.
Avatar użytkownika
bartek
Bladawiec
Bladawiec
 
Posty: 27
Dołączył(a): niedziela, 14 sierpnia 2011, 18:16
Podziękował : 0
Otrzymał podziękowań: 0
System operacyjny: brak systemu
Kompilator: brak kompilatora
Gadu Gadu: 0
    Windows XPFirefox

Re: Ruch jednostajnie przyspieszony C++

Nowy postprzez bartek » piątek, 19 sierpnia 2011, 22:57

Cyfrowy baronie ale pomoc na forach jest zajebista.
Avatar użytkownika
bartek
Bladawiec
Bladawiec
 
Posty: 27
Dołączył(a): niedziela, 14 sierpnia 2011, 18:16
Podziękował : 0
Otrzymał podziękowań: 0
System operacyjny: brak systemu
Kompilator: brak kompilatora
Gadu Gadu: 0
    Windows XPFirefox

Re: Ruch jednostajnie przyspieszony C++

Nowy postprzez Cyfrowy Baron » sobota, 20 sierpnia 2011, 08:23

bartek napisał(a):Cyfrowy baronie ale pomoc na forach jest zajebista.


Są wakacje...

Musisz ustalić, od którego momentu obiekt ma hamować, bo sama zmienna niczego nie robi. Odnoszę wrażenie, że ten Twój kod to skądś przepisałeś i wogóle go nie rozumiesz.

Nie można podać więcej, gdyż to Ty podałeś za mało kodu. W Twoim kodzie nie ma nigdzie obiektu, którym poruszasz. Nigdzie też nie ma kodu odpowiedzialnego za poruszanie obiektem. Domyślam się tylko, że jest to zmienna Phi1, ale w jaki sposób ta zmienna porusza obiektem, skoro nigdzie w zdarzeniu OnTimer nie przypisujesz jej żadnemu obiektowi. Po rozpoczęciu hamowania należałoby zmienną ih dodawać właśnie do Phi1 tak jak to robisz ze zmienną i. Poza tym postępujesz bezmyślnie, gdyż zmienną i uczyniłeś statyczną, ale zmienną ih już nie.

Podałeś za mało danych i dlatego masz taką a nie inną odpowiedź.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Re: Ruch jednostajnie przyspieszony C++

Nowy postprzez bartek » sobota, 20 sierpnia 2011, 10:22

Cyfrowy baronie właśnie poruszając Phi1 poruszam obiektem i normalnie do diabła porusza obiektem, jeżeli nie wiesz tak prostej rzeczy jak to że zmienna Phi1 może poruszać obiektem to jakim cudem do diabła jesteś programistą.Szlach mnie trafia, zmienna Phi1 jest nad instrukcją tworzącą wirtualny obiekt. I powiedz mi jak tą zmienną ih dodawać do Phi1.
Avatar użytkownika
bartek
Bladawiec
Bladawiec
 
Posty: 27
Dołączył(a): niedziela, 14 sierpnia 2011, 18:16
Podziękował : 0
Otrzymał podziękowań: 0
System operacyjny: brak systemu
Kompilator: brak kompilatora
Gadu Gadu: 0
    Windows XPFirefox

Re: Ruch jednostajnie przyspieszony C++

Nowy postprzez polymorphism » sobota, 20 sierpnia 2011, 10:40

Poza tym postępujesz bezmyślnie, gdyż zmienną i uczyniłeś statyczną, ale zmienną ih już nie.

Zmienna ih nie musi być statyczna, ponieważ jej wartość jest ustalana na podstawie wartości zmiennej i i czasu.

I fajnie po cholere pisałeś polymorphism jak nie działa

A po taką cholerę, żebyś zrozumiał, o co mi chodzi. Tylko że Tobie nie chciało się nawet zrozumieć w minimalnym stopniu "własnego" kodu, a co dopiero sugestii innych. No dobra, tu masz kod, który powinien Ci rozjaśnić sytuację:
KOD cpp:     UKRYJ  
bool hamowanie = false;

...

void __fastcall TForm1::Timer2Timer(TObject *Sender)
{
        static float i = 0.0;

        iElapsTime = GetTickCount() - iStartTime;
       
        if( /* tu ustalasz moment, w którym zaczyna się hamowanie, pomyśl */ )
        {
                i = ((float)iElapsTime / 20000.0);
                Phi1 = Phi1 + i;
        }
        else
        {
                if(!hamowanie)
                {
                        hamowanie  = true;
                        iStartTime = GetTickCount();
                        iElapsTime = 0;
                }
                else
                {
                        float ih = i - ((float)iElapsTime / 20000.0);
                        if(ih < 0) ih = 0;
                        Phi1 = Phi1 + ih;
                }
        }
}

Nie wiem, czy on działa, był pisany z palca, bez większego zaangażowania.


Aha, i jeszcze jedno. Na forum nikt nie ma obowiązku Tobie pomagać, więc proponuję nieco ostudzić emocje, bo do sprawy nic one nie wnoszą i na nikim nie robią wrażenia. Więcej cierpliwości i samodzielnej pracy.
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows XPFirefox

Re: Ruch jednostajnie przyspieszony C++

Nowy postprzez bartek » sobota, 20 sierpnia 2011, 10:43

Masz projekt cyfrowy baronie i zobacz że obiekt porusza się do diabła ruchem jednostajnie przyspieszonym i zatrzymuje w miejscu zamiast wyhamowywać ruchem jednostajnie opóźnionym. Właśnie do cholery tego ruchu jednostajne opóźnionego nie umiem zrobić.
Nie masz wystarczających uprawnień, aby zobaczyć pliki załączone do tego postu.
Ostatnio edytowano sobota, 20 sierpnia 2011, 12:44 przez Cyfrowy Baron, łącznie edytowano 1 raz
Powód: Poprawiono błędy ortograficzne.
Avatar użytkownika
bartek
Bladawiec
Bladawiec
 
Posty: 27
Dołączył(a): niedziela, 14 sierpnia 2011, 18:16
Podziękował : 0
Otrzymał podziękowań: 0
System operacyjny: brak systemu
Kompilator: brak kompilatora
Gadu Gadu: 0
    Windows XPFirefox

Re: Ruch jednostajnie przyspieszony C++

Nowy postprzez bartek » sobota, 20 sierpnia 2011, 10:51

Działa polymorphism.
Ostatnio edytowano sobota, 20 sierpnia 2011, 11:04 przez bartek, łącznie edytowano 1 raz
Avatar użytkownika
bartek
Bladawiec
Bladawiec
 
Posty: 27
Dołączył(a): niedziela, 14 sierpnia 2011, 18:16
Podziękował : 0
Otrzymał podziękowań: 0
System operacyjny: brak systemu
Kompilator: brak kompilatora
Gadu Gadu: 0
    Windows XPFirefox

Re: Ruch jednostajnie przyspieszony C++

Nowy postprzez bartek » sobota, 20 sierpnia 2011, 10:55

Polymorphism powiedz mi jak uczyć się rozumowo kodu tak żeby samemu móc go układać, bo widzę że mam za małą wiedzę.
Ostatnio edytowano sobota, 20 sierpnia 2011, 11:06 przez bartek, łącznie edytowano 1 raz
Avatar użytkownika
bartek
Bladawiec
Bladawiec
 
Posty: 27
Dołączył(a): niedziela, 14 sierpnia 2011, 18:16
Podziękował : 0
Otrzymał podziękowań: 0
System operacyjny: brak systemu
Kompilator: brak kompilatora
Gadu Gadu: 0
    Windows XPFirefox

Następna strona

  • Podobne tematy
    Odpowiedzi
    Wyświetlone
    Ostatni post

Powrót do Ogólne problemy z programowaniem

Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zalogowanych użytkowników i 7 gości