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

[C++] Zamiatanie po kącie, dla kompletnego laika

Ostatnio zmodyfikowano 2014-05-31 18:41
Autor Wiadomość
AngrySkarpeta
Temat założony przez niniejszego użytkownika
[C++] Zamiatanie po kącie, dla kompletnego laika
» 2014-05-27 20:10:15
Witam,
Wiem że może to być dość upierdliwie, ale pilnie potrzebuje pomocy, otóż absolutnie nie wyobrażam sobie jak miałoby by wyglądać "zamiatanie po kącie" w kodzie, znam niby podstawy teoretyczne, ale jestem raczej laikiem jeżeli chodzi o programowanie a potrzebuje tego na zaliczenie, nie oczekuje napisania za mnie programu (bez przesady) ale pomocy w zrozumieniu jak to powinno wyglądać i dlaczego. Algorytm zamiatania wykorzystać muszę w zadaniu 10 pod tym linkiem http://www.wfis.uni.lodz.pl/staff/tgwizdalla/files/problemy_zal_13_14.pdf mam nadzieje że wykorzystanie go tutaj jest poprawne (Prowadzący powiedział że "być może" -.-). Póki co napisałem klasę dla tego zagadnienia, i byłbym wdzięczny jakby ktoś spojrzał czy nie narobiłem jakichś głupot (co było by, wstyd się przyznać ale bardzo w moim stylu), oraz za każdą podpowiedź w kwestii "jak zacząć". Postaram się dziś, albo jutro wstawić jeszcze efekty mojej "rozkminy" wraz z kolegą, który jest w te klocki trochę lepszy niż ja ;-). Z góry dziękuje wszystkim którzy zechcą mi pomóc ;-)
C/C++
#include <iostream>
#include <cstdlib>
#include <fstream>
#include <string>
#include <math.h>
class Swiatynia
{
public:
    /* NW = PÓŁNOCNY ZACHÓD
        SE = POŁUDNIOWY WSCHÓD
        NE = PÓŁNOCNY WSCHÓD
        SW = POŁUDNIOWY ZACHÓD */
    int NW_x, NW_y, SE_x, SE_y, NE_x, NE_y, SW_x, SW_y;
    char Kierunek;
    float Oltarz_x, Oltarz_y, Sciana_N, Sciana_S, Sciana_W, Sciana_E;
    float Drzwi_N_x1, Drzwi_N_x2, Drzwi_N_y1, Drzwi_N_y2, Drzwi_S_x1, Drzwi_S_x2, Drzwi_S_y1, Drzwi_S_y2, Drzwi_W_x1, Drzwi_W_x2, Drzwi_W_y1, Drzwi_W_y2, Drzwi_E_x1, Drzwi_E_x2, Drzwi_E_y1, Drzwi_E_y2;
    Swiatynia()
    {
        NW_x = NW_y = SE_x = SE_y = 0;
        Kierunek = NULL;
    }
    Swiatynia( int Nw_x, int Nw_y, int Se_x, int Se_y, char kierunek )
    {
        NW_x = Nw_x;
        NW_y = Nw_y;
        SE_x = Se_x;
        SE_y = Se_y;
        Kierunek = kierunek;
        Oltarz_x =(( Nw_x + Se_x ) / 2 );
        Oltarz_y =(( Nw_y + Se_y ) / 2 );
        NE_x = SE_x;
        NE_y = NW_y;
        SW_x = NW_x;
        SW_y = SE_y;
        Sciana_N = sqrt((( NE_x - NW_x ) ^ 2 ) -(( NE_y - NW_y ) ^ 2 ) );
        Sciana_S = sqrt((( SE_x - SW_x ) ^ 2 ) -(( SE_y - SW_y ) ^ 2 ) );
        Sciana_W = sqrt((( NW_x - SW_x ) ^ 2 ) -(( NW_y - SW_y ) ^ 2 ) );
        Sciana_E = sqrt((( NE_x - SE_x ) ^ 2 ) -(( NE_y - SE_y ) ^ 2 ) );
        Drzwi_N_y1 = Drzwi_N_y2 = NW_y;
        Drzwi_N_x1 =(( NW_x + NE_x ) / 2 ) -( 0.25 *( Sciana_N ) );
        Drzwi_N_x2 =(( NW_x + NE_x ) / 2 ) +( 0.25 *( Sciana_N ) );
        Drzwi_S_y1 = Drzwi_S_y2 = SE_y;
        Drzwi_S_x1 =(( SW_x + SE_x ) / 2 ) -( 0.25 *( Sciana_S ) );
        Drzwi_S_x2 =(( SW_x + SE_x ) / 2 ) +( 0.25 *( Sciana_S ) );
        Drzwi_W_x1 = Drzwi_W_x2 = SW_x;
        Drzwi_W_y1 =(( SW_x + NW_x ) / 2 ) -( 0.25 *( Sciana_W ) );
        Drzwi_W_y1 =(( SW_x + NW_x ) / 2 ) +( 0.25 *( Sciana_W ) );
        Drzwi_E_x1 = Drzwi_E_x2 = SE_x;
        Drzwi_E_y1 =(( SE_y + NE_y ) / 2 ) -( 0.25 *( Sciana_E ) );
        Drzwi_E_y1 =(( SE_y + NE_y ) / 2 ) -( 0.25 *( Sciana_E ) );
    }
};

using namespace std;
Swiatynia * Tablica[ 100 ];
int main()
{
    int Ile_Swiatyn, Nw_x, Nw_y, Se_x, Se_y;
    char kierunek;
    cout << " Program przyjmuje plik o nazwie 'wejsciowe.txt'" << endl;
    ifstream wejsciowe;
    wejsciowe.open( "wejsciowe.txt" );
    wejsciowe >> Ile_Swiatyn;
    cout << Ile_Swiatyn << endl;
    for( int i = 0; i < Ile_Swiatyn; i++ )
    {
        wejsciowe >> Nw_x;
        wejsciowe >> Nw_y;
        wejsciowe >> Se_x;
        wejsciowe >> Se_y;
        wejsciowe >> kierunek;
        Tablica[ i ] = new Swiatynia( Nw_x, Nw_y, Se_x, Se_y, kierunek );
    }
    for( int i = 0; i < Ile_Swiatyn; i++ )
    {
        cout << Tablica[ i ]->NW_x << " " << Tablica[ i ]->NW_y << " " << Tablica[ i ]->SE_x << " " << Tablica[ i ]->SE_y << " " << Tablica[ i ]->Kierunek << " " << Tablica[ i ]->Oltarz_x << " " << Tablica[ i ]->Oltarz_y << endl;
    }
   
    cout <<( Tablica[ 0 ]->Drzwi_E_x1 );
   
    wejsciowe.close();
    return 0;
}
P-110968
pekfos
» 2014-05-27 20:16:34
byłbym wdzięczny jakby ktoś spojrzał czy nie narobiłem jakichś głupot
C/C++
Sciana_N = sqrt((( NE_x - NW_x ) ^ 2 ) -(( NE_y - NW_y ) ^ 2 ) );
Na pierwszy rzut oka, nie ma tu niczego gorszego, niż te 'potęgowanie'.
P-110969
AngrySkarpeta
Temat założony przez niniejszego użytkownika
» 2014-05-27 20:20:59
Ok, dopiero poczytałem że użyć by wypadało "pow". Dziękuje ;-) To mogło być powodem dla którego w przypadku niektórych punktów program wyświetlał "nan" ;-)
Poprawiłem, jednak niektóre wartości nadal mam oznaczone jako "nan", orientuje się ktoś jaki może być powód?
C/C++
#include <iostream>
#include <cstdlib>
#include <fstream>
#include <string>
#include <math.h>
class Swiatynia
{
public:
    /* NW = PÓŁNOCNY ZACHÓD
        SE = POŁUDNIOWY WSCHÓD
        NE = PÓŁNOCNY WSCHÓD
        SW = POŁUDNIOWY ZACHÓD */
    int NW_x, NW_y, SE_x, SE_y, NE_x, NE_y, SW_x, SW_y;
    char Kierunek;
    float Oltarz_x, Oltarz_y, Sciana_N, Sciana_S, Sciana_W, Sciana_E;
    float Drzwi_N_x1, Drzwi_N_x2, Drzwi_N_y1, Drzwi_N_y2, Drzwi_S_x1, Drzwi_S_x2, Drzwi_S_y1, Drzwi_S_y2, Drzwi_W_x1, Drzwi_W_x2, Drzwi_W_y1, Drzwi_W_y2, Drzwi_E_x1, Drzwi_E_x2, Drzwi_E_y1, Drzwi_E_y2;
    Swiatynia()
    {
        NW_x = NW_y = SE_x = SE_y = 0;
        Kierunek = NULL;
    }
    Swiatynia( int Nw_x, int Nw_y, int Se_x, int Se_y, char kierunek )
    {
        NW_x = Nw_x;
        NW_y = Nw_y;
        SE_x = Se_x;
        SE_y = Se_y;
        Kierunek = kierunek;
        Oltarz_x =(( Nw_x + Se_x ) / 2 );
        Oltarz_y =(( Nw_y + Se_y ) / 2 );
        NE_x = SE_x;
        NE_y = NW_y;
        SW_x = NW_x;
        SW_y = SE_y;
        Sciana_N = sqrt(( pow( NE_x - NW_x, 2 ) ) -( pow( NE_y - NW_y, 2 ) ) );
        Sciana_S = sqrt(( pow( SE_x - SW_x, 2 ) ) -( pow( SE_y - SW_y, 2 ) ) );
        Sciana_W = sqrt(( pow( NW_x - SW_x, 2 ) ) -( pow( NW_y - SW_y, 2 ) ) );
        Sciana_E = sqrt(( pow( NE_x - SE_x, 2 ) ) -( pow( NE_y - SE_y, 2 ) ) );
        Drzwi_N_y1 = Drzwi_N_y2 = NW_y;
        Drzwi_N_x1 =(( NW_x + NE_x ) / 2 ) -( 0.25 *( Sciana_N ) );
        Drzwi_N_x2 =(( NW_x + NE_x ) / 2 ) +( 0.25 *( Sciana_N ) );
        Drzwi_S_y1 = Drzwi_S_y2 = SE_y;
        Drzwi_S_x1 =(( SW_x + SE_x ) / 2 ) -( 0.25 *( Sciana_S ) );
        Drzwi_S_x2 =(( SW_x + SE_x ) / 2 ) +( 0.25 *( Sciana_S ) );
        Drzwi_W_x1 = Drzwi_W_x2 = SW_x;
        Drzwi_W_y1 =(( SW_x + NW_x ) / 2 ) -( 0.25 *( Sciana_W ) );
        Drzwi_W_y1 =(( SW_x + NW_x ) / 2 ) +( 0.25 *( Sciana_W ) );
        Drzwi_E_x1 = Drzwi_E_x2 = SE_x;
        Drzwi_E_y1 =(( SE_y + NE_y ) / 2 ) -( 0.25 *( Sciana_E ) );
        Drzwi_E_y1 =(( SE_y + NE_y ) / 2 ) -( 0.25 *( Sciana_E ) );
    }
};

using namespace std;
Swiatynia * Tablica[ 100 ];
int main()
{
    int Ile_Swiatyn, Nw_x, Nw_y, Se_x, Se_y;
    char kierunek;
    cout << " Program przyjmuje plik o nazwie 'wejsciowe.txt'" << endl;
    ifstream wejsciowe;
    wejsciowe.open( "wejsciowe.txt" );
    wejsciowe >> Ile_Swiatyn;
    cout << Ile_Swiatyn << endl;
    for( int i = 0; i < Ile_Swiatyn; i++ )
    {
        wejsciowe >> Nw_x;
        wejsciowe >> Nw_y;
        wejsciowe >> Se_x;
        wejsciowe >> Se_y;
        wejsciowe >> kierunek;
        Tablica[ i ] = new Swiatynia( Nw_x, Nw_y, Se_x, Se_y, kierunek );
    }
    for( int i = 0; i < Ile_Swiatyn; i++ )
    {
        cout << Tablica[ i ]->NW_x << " " << Tablica[ i ]->NW_y << " " << Tablica[ i ]->SE_x << " " << Tablica[ i ]->SE_y << " " << Tablica[ i ]->Kierunek << " " << Tablica[ i ]->Oltarz_x << " " << Tablica[ i ]->Oltarz_y << endl;
    }
   
    cout <<( Tablica[ 0 ]->Drzwi_E_y1 );
   
    wejsciowe.close();
    return 0;
}
_________________________
EDIT:
Ok, w sumie nic z "rozkminiania" nie wyszło. Nie mam pojęcia jak się zabrać za "zamiatanie" niby wiem na czym polega algorytm, jednak nigdzie nie mogę znaleźć jak wygląda coś takiego w kodzie x.x
P-110970
AngrySkarpeta
Temat założony przez niniejszego użytkownika
» 2014-05-31 18:41:57
A może orientuje się ktoś jak zrobić to zadanie bez algorytmu zamiatania? Wiem jak sprawdzić czy dwa odcinki się przecinają, ale nie wiem jak sprawdzić, czy w "obszarze widoczności" wszystko jest zasłonięte przez ściany.
P-111177
« 1 »
  Strona 1 z 1