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

Sortowanie punktów 3D(x,y,z) względem punktu 0,0,0

Ostatnio zmodyfikowano 2014-01-09 07:36
Autor Wiadomość
piotr7k
Temat założony przez niniejszego użytkownika
Sortowanie punktów 3D(x,y,z) względem punktu 0,0,0
» 2014-01-08 19:48:30
Witam , potrzebuje zrobić generator punktów 3D w strukturze które potem będzie można sortować względem punktu 0,0,0
od najbliżej leżącego do najdalej . Poradzono mi żeby zrobić funkcję sprawdzającą położenie 2 punktów, problem polega na tym że nie zupełnie wiem jak to wszystko połączyć

Napisałem coś takiego:
C/C++
struct Wektory_3D
{
    int x;
    int y;
    int z;
}

bool czy_mniejsze( Wektory_3D w1, Wektory_3D w2 )
{
    double odl1 = sqrt( static_cast < float >(( w1.x ) *( w1.x ) +( w1.y ) *( w1.y ) +( w1.z ) *( w1.z ) ) );
    double odl2 = sqrt( static_cast < float >(( w2.x ) *( w2.x ) +( w2.y ) *( w2.y ) +( w2.z ) *( w2.z ) ) );
    if( odl1 > odl2 )
         return true;
    else
         return false;
   
}
void BubbleSort( Wektory_3D * tab, int n )
{
    int zmiana;
   
    do
    {
        zmiana = 0;
        for( int i = 0; i < n; i++ )
        {
            if( czy_mniejsze( w1, w2 ) )
            {
                zmiana++;
                struct Wektory_3D schowek = w1;
                w1 = w2;
                w2 = schowek;
            }
        }
       
    }
    while( zmiana != 0 );
   
}
int _tmain( int argc, _TCHAR * argv[] )
{
    srand( time( NULL ) );
    int i;
    int n = 10;
    Wektory_3D w[ 1000 ];
   
    for( i = 0; i < n; i++ )
    {
        w[ i ].x = rand() % 10 + 1;
        w[ i ].y = rand() % 10 + 1;
        w[ i ].z = rand() % 10 + 1;
       
        cout << i << " ";
        cout << w[ i ].x << "," << w[ i ].y << "," << w[ i ].z << endl;
       
    }
JAk by ktoś wiedział jak to wszystko ogarnąc proszę o podpowiedź:)
P-101625
RazzorFlame
» 2014-01-08 20:48:47
A co szwankuje?

Poza tym chyba chodziło ci o wyliczenie boku C za pomocą twierdzenia pitagorasa. Ja bym to zrobił jakoś tak:
C/C++
double bokC = pow( x * x + y * y + z * z, 1.0 / 3 );
Edit: To jest bardziej takie zmodyfikowane twierdzenie pitagorasa ;P
P-101638
piotr7k
Temat założony przez niniejszego użytkownika
» 2014-01-08 21:41:28
Generalnie chodzi o to, że nie wiem jak ten cały kod zaimplementować, bo generator generuje te punkty, ale nie wiem jak zrobić żeby te punkty były później posortowane.
P-101645
DejaVu
» 2014-01-09 03:15:51
Przecież ten kod jest praktycznie gotowy - jedynie co trzeba zrobić to dopisać wywołanie funkcji sortującej tablicę.
P-101651
RazzorFlame
» 2014-01-09 07:36:12
Tak właściwie to zastanawiałem się dlaczego ja to w ogóle pisze (ten wzór) bo równie dobrze można dodać te osie bez żadnej zabawy z sqrt i pow-em bo jeśli dzieli się obie liczby to tak na prawde nie ma to znaczenia chyba, że chce sie uzyskać taką właściwą odległość.
P-101652
« 1 »
  Strona 1 z 1