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

[C++] Funkcja nie działa poprawnie.

Ostatnio zmodyfikowano 2012-11-17 22:11
Autor Wiadomość
Bane
Temat założony przez niniejszego użytkownika
[C++] Funkcja nie działa poprawnie.
» 2012-11-17 22:11:38
Witam,

Zaimplementowałem algorytm z tej strony http://www.algorytm.org/geometria-obliczeniowa/porzadkowanie-wierzcholkow-wg-rosnacych-katow-nachylenia-ich-wektorow-wodzacych.html

I wg mnie jest on poprawnie zaimplementowany a wynik jest zły.
Oto mój kod.
C/C++
#include <iostream>
#include <vector>
#include <fstream>
#include <cmath>

using namespace std;
int i, j;
class Point
{
public:
    signed int x, y, z;
    float itsAngle;
};

void SetAngle( Point setOfPoints[], int numOfPoints )
{
    int d[ numOfPoints ];
    for( i = 1; i < numOfPoints; i++ )
    {
        if( setOfPoints[ i ].y == 0 )
        {
            if( setOfPoints[ i ].x > 0 )
            {
                setOfPoints[ i ].itsAngle = 0;
            }
            else { setOfPoints[ i ].itsAngle = 180; }
        }
        else
        {
           
           
            d[ i ] = abs( setOfPoints[ i ].x ) + abs( setOfPoints[ i ].y );
            if( setOfPoints[ i ].x >= 0 )
            {
                if( setOfPoints[ i ].y > 0 )
                {
                    setOfPoints[ i ].itsAngle = setOfPoints[ i ].y / d[ i ];
                }
                else
                {
                    setOfPoints[ i ].itsAngle = 4 +( abs( setOfPoints[ i ].y ) / d[ i ] );
                }
            }
            else
            {
                if( setOfPoints[ i ].y > 0 )
                {
                    setOfPoints[ i ].itsAngle = 2 -( setOfPoints[ i ].y / d[ i ] );
                }
                else
                {
                    setOfPoints[ i ].itsAngle = 2 +( abs( setOfPoints[ i ].y ) / d[ i ] );
                }
            }
            cout << "ustawiono itsAngle[" << i << "] na " << setOfPoints[ i ].itsAngle << endl;
        }
    }
}
int main()
{
   
    int numOfPoints;
    ifstream fin( "zbior.txt" );
    fin >> numOfPoints;
    fin.ignore( 2, '\n' );
    cout << numOfPoints << endl;
    Point setOfPoints[ numOfPoints ];
    for( i = 0; i < numOfPoints; i++ )
    {
        fin >> setOfPoints[ i ].z >> setOfPoints[ i ].x >> setOfPoints[ i ].y;
        fin.ignore( 2, '\n' );
        cout << setOfPoints[ i ].z << setOfPoints[ i ].x << setOfPoints[ i ].y << endl;
    }
    fin.close();
    SetAngle( setOfPoints, numOfPoints );
    return 0;
}

Proszę o pomoc.
P-69438
« 1 »
  Strona 1 z 1