У меня есть массив из 2500 шагов, предпринятых роботом, каждый шаг в произвольном направлении (вверх, вниз, вправо или влево).Я должен хранить Евклидово расстояние (гипотенуза прямоугольного треугольника) каждого шага от происхождения робота.Никаких проблем.
Я также должен следить за макс.Евклидово расстояние, которое робот достигает, поэтому, если текущее расстояние больше, чем одно из предыдущих, текущее становится новым наибольшим расстоянием.Вот мой код:
int main(){
int steps[2500];
int randDir[2500];
int coords[2] = {0,0};
int path[2500][2];
double eucliDist[2500];
eucliDist[0] = 1;
double maxEucliDist;
double taxiDist;
for (int i = 0; i < 2500; i++){
randDir[i] = rand() % 4;
steps[i] = i + 1;
switch(randDir[i]){
case 0:
coords[0] = coords[0] + 1;
break;
case 1:
coords[1] = coords[1] + 1;
break;
case 2:
coords[0] = coords[0] - 1;
break;
case 3:
coords[1] = coords[1] - 1;
break;
}
eucliDist[i] = sqrt((pow(coords[0],2)) + (pow(coords[1],2)));
if (eucliDist[i] > eucliDist[i-1]){
maxEucliDist = eucliDist[i]; //need to fix this. Not showing true max Euclid. Dist.
taxiDist = abs(coords[0]) + abs(coords[1]);
}
//cout << "Step " << steps[i] << " Euclidian distance from origin is: " << eucliDist[i] <<endl; //check euclidian dist each step
//cout << steps[i] << "\t Coords (" << coords[0] << ", " << coords[1] << ")" << "\n"; //check coords with each step
}
cout << "Final Coordinates: (" << coords[0] << ", " << coords[1] << ")" << endl;
cout << "Maximum Euclidian distance was: " << maxEucliDist << endl;
cout << "'Taxicab' distance is: " << taxiDist << endl;
cin.get();}
Проблема в том, что мой вывод показывает неверный максимум, как показано во фрагменте моего вывода ниже:
Вывод программы, показывающий неверное максимальное евклидово расстояние
К вашему сведению, расстояние «такси» - это расстояние, которое 2-й робот должен пройти, чтобы добраться до позиции 1-го робота на максимальном расстоянии, если это необходимо (это основание правого треугольника + высота с момента перемещения посетка).
Не уверен, что я делаю не так.Может быть, это как-то связано с моим оператором if в нижней половине кода.
Есть мысли?