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

pętla rysująca graf, problem komiwojażera

Ostatnio zmodyfikowano 2016-03-24 18:26
Autor Wiadomość
Sarrys
Temat założony przez niniejszego użytkownika
pętla rysująca graf, problem komiwojażera
» 2016-01-13 20:51:56
Witam,
Zmagam się z rysowaniem grafów i problemem komiwojażera. Korzystam z SFML. Rysuję punkty/kropki na ekranie(mam dane ich współrzędne), określam początkowy punkt i z niego program ma poprowadzić linie do kolejnej kropki po naciśnięciu strzałki w prawo. Przy kolejnym naciśnięciu klawisza, powinien połączyć tą drugą z trzecią itd.

Poniższy kod nie działa.
wspX -> zawiera współrzędne X kolejnych kropek
wspY -> analogicznie do wspX
kolejnosc -> zawiera indeksy kolejnych kropek

Wydaje mi się, że aby to miało sens, powinienem za każdym razem tworzyć nową linię, o nowej nazwie. Ale nie wiem jak to zrobić. A może da się to rozwiązać inaczej?

Proszę o pomoc/wskazówki/linki. Cokolwiek.

C/C++
int par = 0;
while( par <= liczbamiast - 1 )
{
    if( Keyboard::isKeyPressed( Keyboard::Right ) )
    {
        Vertex line[ 2 ] =
        {
            Vertex( Vector2f( wspX[ kolejnosc[ par ] ] + 5, wspY[ kolejnosc[ par ] ] + 5 ) ),
            Vertex( Vector2f( wspX[ kolejnosc[ par + 1 ] ] + 5, wspY[ kolejnosc[ par + 1 ] ] + 5 ) )
        };
        okno.draw( line, 2, Lines );
        par++;
    }
}
okno.display();

P-143477
jarek20
» 2016-03-24 18:26:28
Spróbuj tak:

///zmienne globalne (ważne żeby było przed pętlą główną)
int par = 0;
bool is_key_pressed=false;
///w pętli głownej

if( Keyboard::isKeyPressed( Keyboard::Right ) )
{
is_key_pressed=true;
}
else if(is_key_pressed)
{
par++;
}///takie rozwiązanie z dwoma ifami i zmienną bool sprawi ze zmienna par będzie inkrementowana jedyni przy puszczeniu klawisza.

for(int i=0; i<par&&i<= liczbamiast - 1;i++ )
{
        Vertex line[ 2 ] =
        {
            Vertex( Vector2f( wspX[ kolejnosc[ par ] ] + 5, wspY[ kolejnosc[ par ] ] + 5 ) ),
            Vertex( Vector2f( wspX[ kolejnosc[ par + 1 ] ] + 5, wspY[ kolejnosc[ par + 1 ] ] + 5 ) )
        };
        okno.draw( line, 2, Lines );
}
okno.display();
P-146520
« 1 »
  Strona 1 z 1