Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[SFML, C++] Ruch po okręgu

Ostatnio zmodyfikowano 2012-01-20 22:44
Autor Wiadomość
maestro
Temat założony przez niniejszego użytkownika
[SFML, C++] Ruch po okręgu
» 2012-01-16 23:30:15
C/C++
#include <SFML/Graphics.hpp>
#include <iostream>
#include <string>
#include <cstdio>


int main()
{
    int nr;
    int z = 1;
    //float a[100];
    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++;
       
        // do{
       
       
        //cały ten wzór umiściłe  w do while i nic ,a jak po wklejałem tak
        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"
P-48473
hincu
» 2012-01-17 06:16:40
trygonometria sie klania :P

nie komplikuje tylko kompiluje -.-
P-48480
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.
P-48541
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

 
P-48565
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 '&&'.
C/C++
if( piksela[ nr ] + z < licznik < pikselki[ no ] + z )
{ x = a + no; }
P-48603
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
P-48616
Dark
» 2012-01-18 14:56:04
tutaj chyba lepiej użyć trygonometrii niż wzoru
P-48638
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:
C/C++
#include <cstdio>

int main() {
    for( int a = 0; a < 10; ++a ) {
        if( 3 < a < 7 ) {
            printf( "%d\n", a );
        } } }
P-48641
« 1 » 2 3 4 5
  Strona 1 z 5 Następna strona