lundi 13 mars 2017

Vector.push_back is returning same values even though rand() is used

I am new to programming, my vectors dataX and dataY for phase 2 of the program are returning the same values every time. I do not know why. Please help. I have spent several hours trying to figure it out, is the error in the calculations, or something to do with rand()? Please help.

int phaseTwoSimulate(double &Xpos, double &Ypos, int diameter, double stepSize) {
    int repeateTimes = 0;
    while (pow(Xpos - 200, 2) + pow(Ypos - 200, 2) < pow(diameter, 2)) {

        int direction = rand() % 8;
        repeateTimes = repeateTimes + 1;
        switch (direction) {
        case 0://north
            Ypos = Ypos - stepSize;
            break;
        case 1://east
            Xpos = Xpos + stepSize;
            break;
        case 2://south
            Ypos = Ypos + stepSize;
            break;
        case 3://west
            Xpos = Xpos - stepSize;
            break;
        case 4://north east
            Xpos = Xpos - sqrt(pow(stepSize, 2) / 2);
            Ypos = Ypos + sqrt(pow(stepSize, 2) / 2);
            break;
        case 5://south east
            Xpos = Xpos + sqrt(pow(stepSize, 2) / 2);
            Ypos = Ypos + sqrt(pow(stepSize, 2) / 2);
            break;
        case 6://south west
            Xpos = Xpos + sqrt(pow(stepSize, 2) / 2);
            Ypos = Ypos - sqrt(pow(stepSize, 2) / 2);
            break;
        case 7://north west
            Xpos = Xpos - sqrt(pow(stepSize, 2) / 2);
            Ypos = Ypos - sqrt(pow(stepSize, 2) / 2);
            break;
        default:
            cout << "error in randomizer" << endl;
            exit(5);
            break;
        }
    }
    return repeateTimes;
}
void phaseTwoWalk(int &loopCount, vector<int>&dataX, vector<int>&dataY) {
    int totalXpos = 0;
    int totalYpos = 0;
    loopCount = loopCounter();
    int endXpos = 0;
    int endYpos = 0;
    double Xpos = 201;
    double Ypos = 201;
    double stepSize = 0;
    int diameterCircle = getDiameter(stepSize);
    dataX.clear();
    dataY.clear();
    for (int repititions = 0; repititions < loopCount; repititions++) {
        int randomHelp = 0;
        repititions = phaseTwoSimulate(Xpos,Ypos,diameterCircle,stepSize);
        dataX.push_back(Xpos);
        dataY.push_back(Ypos);

        int Xpos = 201;
        int Ypos = 201;
    }
}

int main()
{
    int repititions;
    vector<int>phaseOneData;
    vector<int>phaseTwoDataX;
    vector<int>phaseTwoDataY;
    srand(time(NULL));

    if (phase == 2) {
        phaseTwoWalk(repititions, phaseTwoDataX, phaseTwoDataY);
        phaseTwoCalculations(phaseTwoDataX, phaseTwoDataY);
    }

Aucun commentaire:

Enregistrer un commentaire