maestro Temat założony przez niniejszego użytkownika |
[SFML, C++] Ruch po okręgu » 2012-01-16 23:30:15 #include <SFML/Graphics.hpp> #include <iostream> #include <string> #include <cstdio>
int main() { int nr; int z = 1; int x = 400; int y = 300; int licznik = 0; int a = x; int b = y; int licznik2 = 1; float piksele[ 44 ] = { 0, 10, 10, 6, 5, 4, 4, 4, 3, 3, 2, 3, 3, 2, 2, 2, 2, 2, 2, 2, 1, 2, 2, 1, 2, 2, 1, 1, 2, 1, 2, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1 }; float piksela[ 44 ]; float pikselki[ 46 ]; pikselki[ 45 ] = 200; pikselki[ 44 ] = 190; float pixek = 0; int numero = 0; do { pixek += piksele[ numero ]; piksela[ numero ] = pixek; pikselki[ numero ] = piksela[ numero ] + 1; std::cout << numero << "." << pikselki[ numero ] << " " << piksela[ numero ] << " " << piksele[ numero ] << std::endl; numero++; } while( numero < 45 ); piksela[ 0 ] = 0; sf::RenderWindow oknoAplikacji( sf::VideoMode( 800, 600, 32 ), "Kurs SFML - http://cpp0x.pl" ); sf::Image krystal; krystal.LoadFromFile( "krystal.bmp" ); krystal.SetSmooth( false ); krystal.CreateMaskFromColor( sf::Color( 255, 255, 255 ), 125 ); sf::Sprite naszSprajt2; naszSprajt2.SetImage( krystal ); naszSprajt2.SetPosition( x, y ); naszSprajt2.SetScale( 1, 1 ); while( oknoAplikacji.IsOpened() ) { sf::Event zdarzenie; while( oknoAplikacji.GetEvent( zdarzenie ) ) { if( zdarzenie.Type == sf::Event::Closed ) { oknoAplikacji.Close(); } } nr = 0; int no = 1; licznik++; if( piksela[ nr ] + z < licznik < pikselki[ no ] + z ) { x = a + no; } no++; nr++; naszSprajt2.SetPosition( x, y ); if( licznik > 44 ) { licznik = 0; } licznik2++; oknoAplikacji.Clear( sf::Color( 0, 0, 0 ) ); oknoAplikacji.Draw( naszSprajt2 ); oknoAplikacji.Display(); } return 0; }
nie komplikuje jak mi potrzeba
obiekt miał się przesuwać po luku
gdy go pisze bez tablic i do while tylko same dane bez zmiennych nie ma broblemów
koło licznika podaje dwie wartość ograniczające wykonanie pracy z "x" |
|
hincu |
» 2012-01-17 06:16:40 trygonometria sie klania :P
nie komplikuje tylko kompiluje -.- |
|
Dark |
» 2012-01-17 17:03:02 też mam z tym problem, dalej nie wiem jak to dokładnie zrobić. Mam pomysł aby do sinusa lub cosinusa dodawać wielokrotności odpowiedniego kąta lecz nie mam pojęcia jak napisać ten kod, próbowałem napisać lecz nie wyszło, nigdy nie poruszało mi się po kole tylko zwiewało po krzywej za ekran, napisać równanie koła?? :\ Może ktoś potrafi to wytłumaczyć, ostatnio jak napisałem temat związany z ruchem o kole otrzymałem odpowiedź że to jest podobne do obrotach w osi z, lecz żadnych szczegółów. |
|
maestro Temat założony przez niniejszego użytkownika |
» 2012-01-17 18:01:57 ja wiem że jest wzór ,ale jak widzisz wprowadziłem dane bez wzoru najpierw dane podałem bezpośrednio do if i działało a gdy przerobiłem to na tablice ,albo do "do while" przestało czyli "x" nie zmieniał pozycji
na razie chciał to mnożyć ,ale wiem że to by było nie udane ,moge sprawdzić wykresy z parabolą ale ja chce wiedzieć czemu z tablicą ,albo "do while" nie działa
niech ktoś poda prosty przykład
|
|
Dark |
» 2012-01-17 21:10:38 Rozdziel nierówność kompilator tego nie ogarnia, nie stosuj podwójnej nierówności tylko pojedyncze. Użyj '&&'. if( piksela[ nr ] + z < licznik < pikselki[ no ] + z ) { x = a + no; } |
|
maestro Temat założony przez niniejszego użytkownika |
» 2012-01-17 23:10:50 ale dziwne ,no wspomniałem że wpisywałem coś takiego if(0<licznik<11) czyli same dane i poradził sobie może tablica zwiększa problem i to pomogło ale wzór by się przydał bo tak to nie zwiększę obwodu okręgu bez liczenia pikseli
|
|
Dark |
» 2012-01-18 14:56:04 tutaj chyba lepiej użyć trygonometrii niż wzoru |
|
pekfos |
» 2012-01-18 15:25:39 ale dziwne ,no wspomniałem że wpisywałem coś takiego if(0<licznik<11) czyli same dane i poradził sobie może tablica zwiększa problem |
zapis if( a < b < c ) nie będzie działać tak, jak można tego oczekiwać. Sprawdź działanie tego: #include <cstdio>
int main() { for( int a = 0; a < 10; ++a ) { if( 3 < a < 7 ) { printf( "%d\n", a ); } } } |
|
« 1 » 2 3 4 5 |