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

Ruch jednostajnie przyspieszony C++

dział ogólny

Re: Ruch jednostajnie przyspieszony C++

Nowy postprzez Cyfrowy Baron » sobota, 20 sierpnia 2011, 12:53

bartek napisał(a):Cyfrowy baronie właśnie poruszając Phi1 poruszam obiektem i normalnie do diabła porusza obiektem,


Normalnie...?!? Hm!!! Jak rozumiem cały twój program działa normalnie i taka jest odpowiedź na pytanie w jaki sposób zmienna przekazuje wartość do obiektu?! Pogratulować bystrości umysłu.

bartek napisał(a):I powiedz mi jak tą zmienną ih dodawać do Phi1.


Interesujące...

Cyfrowy Baron napisał(a):Po rozpoczęciu hamowania należałoby zmienną ih dodawać właśnie do Phi1 tak jak to robisz ze zmienną i


bartek napisał(a):
KOD cpp:     UKRYJ  
Phi1 = Phi1 + i;


polymorphism napisał(a):
KOD cpp:     UKRYJ  
Phi1 = Phi1 + ih;


nic dodać, nic ująć...
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, 13:05

Dobrze, dziękuje, wszystko działa. Teraz rozumiem ten kod już.
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, 13:46

A jeszcze mam pytanie bo robię obszar ograniczony i dla PozycjaZ wygląda w ten sposób:

KOD cpp:     UKRYJ  
if ((PozycjaZ < rect.PozycjaZ  + rect.width/2 + 0.1f)   && (PozycjaZ > rect.PozycjaZ ))
                PozycjaZ = rect.PozycjaZ  + rect.width/2 + 0.1f;

                if ((PozycjaZ > rect.PozycjaZ - rect.width/2 - 0.1f)   && (PozycjaZ < rect.PozycjaZ))
                         PozycjaZ = rect.PozycjaZ - rect.width/2 - 0.1f;

                         if     ((PozycjaZ < rect.PozycjaZ + rect.width/2) && (PozycjaZ > rect.PozycjaZ - rect.width/2));
Dla PozycjaY wygląda w ten sposób:

KOD cpp:     UKRYJ  
   if ((PozycjaY < rect.PozycjaY + rect.height/2 + 0.1f)   && (PozycjaY > rect.PozycjaY))
                               PozycjaY = rect.PozycjaY + rect.height/2 + 0.1f;

                                if ((PozycjaY > rect.PozycjaY - rect.height/2 - 0.1f)   && (PozycjaY < rect.PozycjaY))
                                  PozycjaY = rect.PozycjaY - rect.height/2 - 0.1f;

                                 if((PozycjaY < rect.PozycjaY + rect.height/2) && (PozycjaY > rect.PozycjaY - rect.height/2));
I teraz jak zrobić dla PozycjaX bo zrobiłem coś takiego ale nie działa:

KOD cpp:     UKRYJ  
  if ((PozycjaX < rect.PozycjaX + rect.length/2 + 0.1f)   && (PozycjaX > rect.PozycjaX))
                               PozycjaX = rect.PozycjaX + rect.length/2 + 0.1f;

                                if ((PozycjaX > rect.PozycjaX - rect.length/2 - 0.1f)   && (PozycjaX < rect.PozycjaX))
                                  PozycjaX = rect.PozycjaX - rect.length/2 - 0.1f;

                                 if((PozycjaX < rect.PozycjaX + rect.length/2) && (PozycjaX > rect.PozycjaX - rect.length/2));
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, 16:19

Dobra już mówię spokojnie i nie wyzywam nikogo, jeżeli ktoś chce mi w tym pomóc to niech mi pomoże.
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, 19:39

Polymorphism może wiesz jak to zrobić, jeżeli wiesz to prosze pomóż.
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, 23:49

Pomoże mi ktoś?
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 » niedziela, 21 sierpnia 2011, 10:30

bartek napisał(a):I teraz jak zrobić dla PozycjaX bo zrobiłem coś takiego ale nie działa:


Założenia warunku są prawidłowe. Nie ma tutaj błędu. Błąd musi występować w innej części kodu, której tutaj nie zaprezentowałeś. Być może struktura rect zawiera nieprawidłowe dane, a konkretnie element length.

Co w Twoim kodzie robi trzeci blok warunków, czyli ten:

KOD cpp:     UKRYJ  
if     ((PozycjaZ < rect.PozycjaZ + rect.width/2) && (PozycjaZ > rect.PozycjaZ - rect.width/2));


W takiej formie jest zbędny, gdyż średnik na końcu i bez nawiasów kończy warunek.
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 » niedziela, 21 sierpnia 2011, 11:56

Cyfrowy Baronie ale to jest dobre:
KOD cpp:     UKRYJ  
if ((PozycjaZ < rect.PozycjaZ  + rect.width/2 + 0.1f)   && (PozycjaZ > rect.PozycjaZ ))
                PozycjaZ = rect.PozycjaZ  + rect.width/2 + 0.1f;

                if ((PozycjaZ > rect.PozycjaZ - rect.width/2 - 0.1f)   && (PozycjaZ < rect.PozycjaZ))
                         PozycjaZ = rect.PozycjaZ - rect.width/2 - 0.1f;

                         if     ((PozycjaZ < rect.PozycjaZ + rect.width/2) && (PozycjaZ > rect.PozycjaZ - rect.width/2));




i to też dobre:


KOD cpp:     UKRYJ  
if ((PozycjaY < rect.PozycjaY + rect.height/2 + 0.1f)   && (PozycjaY > rect.PozycjaY))
                               PozycjaY = rect.PozycjaY + rect.height/2 + 0.1f;

                                if ((PozycjaY > rect.PozycjaY - rect.height/2 - 0.1f)   && (PozycjaY < rect.PozycjaY))
                                  PozycjaY = rect.PozycjaY - rect.height/2 - 0.1f;

                                 if((PozycjaY < rect.PozycjaY + rect.height/2) && (PozycjaY > rect.PozycjaY - rect.height/2));



Napisałem ci Cyfrowy baronie że chodzi o PozycjaX, o to:

KOD cpp:     UKRYJ  
if ((PozycjaX < rect.PozycjaX + rect.length/2 + 0.1f)   && (PozycjaX > rect.PozycjaX))
                               PozycjaX = rect.PozycjaX + rect.length/2 + 0.1f;

                                if ((PozycjaX > rect.PozycjaX - rect.length/2 - 0.1f)   && (PozycjaX < rect.PozycjaX))
                                  PozycjaX = rect.PozycjaX - rect.length/2 - 0.1f;

                                 if((PozycjaX < rect.PozycjaX + rect.length/2) && (PozycjaX > rect.PozycjaX - rect.length/2));


co nie czytałeś Cyfrowy baronie?
i błędu nie ma w innej części kodu bo te dwie pierwsze działają natomiast to z PozycjaX nie działa.
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 » niedziela, 21 sierpnia 2011, 11:58

Oto jest cały kod cyfrowy baronie:
KOD cpp:     UKRYJ  
struct _player
{
        float PozycjaZ;
        float PozycjaY;
        float PozycjaX;
        float angle;
} player;


struct _rect
{
        float PozycjaZ, PozycjaY, PozycjaX;
        float width, height, length;
} rect;

TForm1 *Form1;

__fastcall TForm1::TForm1(TComponent* Owner)
        : TGLForm(Owner)
{
debug_mode=false;
SwobodneObroty=true;
Obracaj(10.0f,0.0f,0.0f);
Caption=(AnsiString)"GLForm, OpenGL "+(char*)glGetString(GL_VERSION);
}

void __fastcall TForm1::RysujScene()
{

glRotatef(0.0, 1.0, 0.0, 0.0);  /*wokół OY*/
glTranslatef(PozycjaX+2, PozycjaY, PozycjaZ); /*Przesunięcia*/
float rozmiar1=0.3f;
RysujPlyte(rozmiar1);
StartEngine();
DoEngine();
}

void __fastcall TForm1::RysujPlyte(float krawedz) const    /*Utworzenie podłoża*/
{
        const float a=krawedz;


        glBegin(GL_QUADS);
        //tylnia

        //dolna
   glNormal3f(0,-1,0);
        glTexCoord2f(1.0f, 1.0f); glVertex3f(-a,-a,a);
        glTexCoord2f(1.0f, 0.0f); glVertex3f(a,-a,a);
        glTexCoord2f(0.0f, 0.0f); glVertex3f(a,-a,-a);
        glTexCoord2f(0.0f, 1.0f); glVertex3f(-a,-a,-a);
        glEnd();

}



void __fastcall TForm1::FormKeyDown(TObject *Sender, WORD &Key,
      TShiftState Shift)
{
if (Key==VK_ESCAPE) Close();
if (Shift.Empty())
{
switch (Key)
{
case VK_ESCAPE: Close(); break;
case VK_LEFT: PozycjaZ -= 0.1f;  break;
case VK_RIGHT: PozycjaZ += 0.1; break;
case VK_UP: PozycjaX += 0.1; break;
case VK_DOWN: PozycjaX -= 0.1; break;
case 'W': PozycjaY += 0.1; break;
if (glIsEnabled(GL_BLEND)) glDisable(GL_BLEND);
else glEnable(GL_BLEND);
}
}
RysujScene();
}
//---------------------------------------------------------------------------


void __fastcall TForm1::StartEngine()
{
        player.PozycjaZ = 0.0f;
          player.PozycjaY = 0.0f;
          player.PozycjaX = 0.0f;

        rect.PozycjaZ = 0.0f;
        rect.PozycjaZ = 0.0f;
        rect.PozycjaX = 0.0f;
        rect.width = 0.5f;
        rect.height = 0.5f;
        rect.length = 0.5f;


}

void __fastcall TForm1::DoEngine()

{


                if ((PozycjaZ < rect.PozycjaZ  + rect.width/2 + 0.1f)   && (PozycjaZ > rect.PozycjaZ ))
                PozycjaZ = rect.PozycjaZ  + rect.width/2 + 0.1f;

                if ((PozycjaZ > rect.PozycjaZ - rect.width/2 - 0.1f)   && (PozycjaZ < rect.PozycjaZ))
                         PozycjaZ = rect.PozycjaZ - rect.width/2 - 0.1f;

                         if     ((PozycjaZ < rect.PozycjaZ + rect.width/2) && (PozycjaZ > rect.PozycjaZ - rect.width/2));


                            if ((PozycjaY < rect.PozycjaY + rect.height/2 + 0.1f)   && (PozycjaY > rect.PozycjaY))
                               PozycjaY = rect.PozycjaY + rect.height/2 + 0.1f;

                                if ((PozycjaY > rect.PozycjaY - rect.height/2 - 0.1f)   && (PozycjaY < rect.PozycjaY))
                                  PozycjaY = rect.PozycjaY - rect.height/2 - 0.1f;

                                 if((PozycjaY < rect.PozycjaY + rect.height/2) && (PozycjaY > rect.PozycjaY - rect.height/2));





                                   if ((PozycjaX < rect.PozycjaX + rect.length/2 + 0.1f)   && (PozycjaX > rect.PozycjaX))
                               PozycjaX = rect.PozycjaX + rect.length/2 + 0.1f;

                                if ((PozycjaX > rect.PozycjaX - rect.length/2 - 0.1f)   && (PozycjaX < rect.PozycjaX))
                                  PozycjaX = rect.PozycjaX - rect.length/2 - 0.1f;

                                 if((PozycjaX < rect.PozycjaX + rect.length/2) && (PozycjaX > rect.PozycjaX - rect.length/2));





}



Układałem go dwa tygodnie
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 » niedziela, 21 sierpnia 2011, 13:27

Po pierwsze jeśli coś nie działa, to trzeba napisać, czym jest to tajemnicze "coś". Po drugie, dołączam się do pytania Barona o sens trzeciego warunku w każdym z bloków testowych. Po trzecie, nie pomieszałeś tu czegoś? Szerokość powinna odnosić się do płaszczyzny X, wysokość - Y, głębokość/długość - Z. U Ciebie głębokość odnosi się do X.

Układałem go dwa tygodnie

Razem z Agnieszka16 i jeszcze jednym szczylem, który tu ostatnio gębował (choć 100% pewności nie mam) ;)
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 Cyfrowy Baron » niedziela, 21 sierpnia 2011, 14:19

bartek napisał(a):co nie czytałeś Cyfrowy baronie?
i błędu nie ma w innej części kodu bo te dwie pierwsze działają natomiast to z PozycjaX nie działa.


Czytałem, czytałem i dlatego odniosłem się właśnie do warunków z PozycjaX i powtarzam jeszcze raz: Założenia warunku są prawidłowe. Nie ma tutaj błędu. Błąd musi występować w innej części kodu, której tutaj nie zaprezentowałeś. Być może struktura rect zawiera nieprawidłowe dane, a konkretnie element length.

Trudno jest udzielać Tobie pomocy, gdyż Ty nie rozumiesz własnego (własnego - mocno już wątpię) kodu. Te trzy elementy kodu:

KOD cpp:     UKRYJ  
if     ((PozycjaZ < rect.PozycjaZ + rect.width/2) && (PozycjaZ > rect.PozycjaZ - rect.width/2));
if((PozycjaY < rect.PozycjaY + rect.height/2) && (PozycjaY > rect.PozycjaY - rect.height/2));
if((PozycjaX < rect.PozycjaX + rect.length/2) && (PozycjaX > rect.PozycjaX - rect.length/2));


Nic nie robią, za nic nie odpowiadają, po prostu są i są zbędne!

Używanie struktury w tym kodzie nie ma większego sensu, gdyż wszystkie trzy zmienne struktury rect, czyli width, height i length mają tą samą wartość. Podobnie zresztą z pozostałymi elementami struktury.

bartek napisał(a):Oto jest cały kod cyfrowy baronie:


Na pewno nie cały, gdyż podałeś tylko zawartość pliku źródłowego. W warunkach używasz zmiennych PozycjaX, PozycjaX i PozycjaZ, ale w przytoczonym kodzie brak zapowiedzi tych zmiennych, no ale to akurat w przypadku problemu szczegół bez znaczenia.
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 » niedziela, 21 sierpnia 2011, 14:27

Cyfrowy baronie chodzi o to że zmiennych tych do PozycjaX , PozycjaY, PozycjaZ nie trzeba podawać bo są zainicjowane gdzie indziej, chodzi mi o przypisanie obszaru ograniczonego do tych zmiennych, chodzi o to że PozycjaX jak jest połączona z obszarem zabronionym to bez końca w stronę PozycjaX czyli głębokości jest ten obszar zabroniony, w stronę PozycjaY i PozycjaZ jest dobrze a w stronę PozycjaX bez końca jeżeli nie ułożę obszaru dla PozycjaX a jeżeli ułoże to jest takie coś jak w pliku którym przesyłam, sprawdź se cyfrowy baronie.
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 » niedziela, 21 sierpnia 2011, 14:31

I mówię to jest cały kod:

KOD cpp:     UKRYJ  
struct _player
{
        float PozycjaZ;
        float PozycjaY;
        float PozycjaX;
        float angle;
} player;


struct _rect
{
        float PozycjaZ, PozycjaY, PozycjaX;
        float width, height, length;
} rect;

TForm1 *Form1;

__fastcall TForm1::TForm1(TComponent* Owner)
        : TGLForm(Owner)
{
debug_mode=false;
SwobodneObroty=true;
Obracaj(10.0f,0.0f,0.0f);
Caption=(AnsiString)"GLForm, OpenGL "+(char*)glGetString(GL_VERSION);
}

void __fastcall TForm1::RysujScene()
{

glRotatef(0.0, 1.0, 0.0, 0.0);  /*wokół OY*/
glTranslatef(PozycjaX+2, PozycjaY, PozycjaZ); /*Przesunięcia*/
float rozmiar1=0.3f;
RysujPlyte(rozmiar1);
StartEngine();
DoEngine();
}

void __fastcall TForm1::RysujPlyte(float krawedz) const    /*Utworzenie podłoża*/
{
        const float a=krawedz;


        glBegin(GL_QUADS);
        //tylnia

        //dolna
   glNormal3f(0,-1,0);
        glTexCoord2f(1.0f, 1.0f); glVertex3f(-a,-a,a);
        glTexCoord2f(1.0f, 0.0f); glVertex3f(a,-a,a);
        glTexCoord2f(0.0f, 0.0f); glVertex3f(a,-a,-a);
        glTexCoord2f(0.0f, 1.0f); glVertex3f(-a,-a,-a);
        glEnd();

}



void __fastcall TForm1::FormKeyDown(TObject *Sender, WORD &Key,
      TShiftState Shift)
{
if (Key==VK_ESCAPE) Close();
if (Shift.Empty())
{
switch (Key)
{
case VK_ESCAPE: Close(); break;
case VK_LEFT: PozycjaZ -= 0.1f;  break;
case VK_RIGHT: PozycjaZ += 0.1; break;
case VK_UP: PozycjaX += 0.1; break;
case VK_DOWN: PozycjaX -= 0.1; break;
case 'W': PozycjaY += 0.1; break;
if (glIsEnabled(GL_BLEND)) glDisable(GL_BLEND);
else glEnable(GL_BLEND);
}
}
RysujScene();
}
//---------------------------------------------------------------------------


void __fastcall TForm1::StartEngine()
{
        player.PozycjaZ = 0.0f;
          player.PozycjaY = 0.0f;
          player.PozycjaX = 0.0f;

        rect.PozycjaZ = 0.0f;
        rect.PozycjaZ = 0.0f;
        rect.PozycjaX = 0.0f;
        rect.width = 0.5f;
        rect.height = 0.5f;
        rect.length = 0.5f;


}

void __fastcall TForm1::DoEngine()

{


                if ((PozycjaZ < rect.PozycjaZ  + rect.width/2 + 0.1f)   && (PozycjaZ > rect.PozycjaZ ))
                PozycjaZ = rect.PozycjaZ  + rect.width/2 + 0.1f;

                if ((PozycjaZ > rect.PozycjaZ - rect.width/2 - 0.1f)   && (PozycjaZ < rect.PozycjaZ))
                         PozycjaZ = rect.PozycjaZ - rect.width/2 - 0.1f;

                         if     ((PozycjaZ < rect.PozycjaZ + rect.width/2) && (PozycjaZ > rect.PozycjaZ - rect.width/2));


                            if ((PozycjaY < rect.PozycjaY + rect.height/2 + 0.1f)   && (PozycjaY > rect.PozycjaY))
                               PozycjaY = rect.PozycjaY + rect.height/2 + 0.1f;

                                if ((PozycjaY > rect.PozycjaY - rect.height/2 - 0.1f)   && (PozycjaY < rect.PozycjaY))
                                  PozycjaY = rect.PozycjaY - rect.height/2 - 0.1f;

                                 if((PozycjaY < rect.PozycjaY + rect.height/2) && (PozycjaY > rect.PozycjaY - rect.height/2));





                                   if ((PozycjaX < rect.PozycjaX + rect.length/2 + 0.1f)   && (PozycjaX > rect.PozycjaX))
                               PozycjaX = rect.PozycjaX + rect.length/2 + 0.1f;

                                if ((PozycjaX > rect.PozycjaX - rect.length/2 - 0.1f)   && (PozycjaX < rect.PozycjaX))
                                  PozycjaX = rect.PozycjaX - rect.length/2 - 0.1f;

                                 if((PozycjaX < rect.PozycjaX + rect.length/2) && (PozycjaX > rect.PozycjaX - rect.length/2));
}



a PozycjaX, PozycjaY, PozycjaZ są zainicjalizowane w innym module bo muszą być w innym w taki sposób bo to jest z książki znanego autora Matulewskiego Jacka i jest dobrze:


void __fastcall StartEngine();
void __fastcall DoEngine();
float PozycjaX, PozycjaY, PozycjaZ;
Ostatnio edytowano niedziela, 21 sierpnia 2011, 14:44 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 Cyfrowy Baron » niedziela, 21 sierpnia 2011, 14:42

Wiem o co Tobie chodzi, chcesz ograniczyć obszar przemieszczania się obiektu w 3D i po to są te warunki. PozycjaY dla wysokości, PozycjaZ dla długości i PozycjaX dla głębi. Pomijając fakt, że nadałeś mylące nazwy zmiennym, gdyż logiczniej byłoby zmiennej PozycjaZ nadać głębię, to warunki są prawidłowe.


bartek napisał(a):
KOD cpp:     UKRYJ  
glTranslatef(PozycjaX+2, PozycjaY, PozycjaZ); /*Przesunięcia*/


Dlaczego PozycjaX + 2?

U Ciebie zmienna PozycjaX określa głębokość - jak rozumiem, a tymczasem funkcja glTranslatef oczekuje argumentów w takiej kolejności: długość, wysokość, głębokość, a Ty przekazałeś jej argumenty w kolejności: głębokość / 2, wysokość, długość. Wynika to oczywiście z mylącej nazwy zmiennych, o czym wspomniałem na początku.
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 » niedziela, 21 sierpnia 2011, 14:46

Tak to wygląda gdy jest zrobiona PozycjaX.
Nie masz wystarczających uprawnień, aby zobaczyć pliki załączone do tego postu.
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

Poprzednia stronaNastę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 5 gości