У меня есть 2 вектора, один (вектор1 структур (Point)) заполняется X количеством точек, а другой (vector2 of structs (PrimeTemplate)) заполняется Y количеством точек. Я хочу найти все значения ниже порога, и я чувствую, что мой код просто этого не делает. На данный момент я просто проигнорирую, если одна точка отображает более одного другого. Что мне не хватает? Я генерирую только несколько моментов, и я знаю, что я должен получать больше.Кратчайшее расстояние до точки
struct Template{
int tempX;
int tempY;
};
struct PrimeTemplate{
double tempX;
double tempY;
};
int matches = 0;
for (int outerLoop = 0; outerLoop < vector1 .size(); outerLoop++)
{
for (int innerLoop = 0; innerLoop < vector2.size(); innerLoop++)
{
double tempEuclidianX = std::pow(abs(vector1 [outerLoop].tempX - vector2[innerLoop].tempX), 2.0);
double tempEuclidianY = std::pow(abs(vector1 [outerLoop].tempY - vector2[innerLoop].tempY), 2.0);
double Euclidian = sqrt(tempEuclidianX + tempEuclidianY);
if (Euclidian <= 5) //less than threshold
{
matches++;
}
}
}
Пример ввода из файла будет выглядеть следующим образом (два разных файла, случайные числа) (не беспокойтесь о получении данных, все это есть)
245 21
452 54
124 68
485 78
111 29
97 75
78 113
300 124
411 101
Вы * знаете * вы должны получать больше? На основании чего? У вас есть образец ввода и ожидаемый результат, который показывает, что ваш код не делает то, что вы хотите? –
Привет, Грег, у меня есть выборка. Это точка соответствия. Это выполняется в пределах 2 для циклов. поэтому игнорируйте, что совпадения никогда не сбрасываются. – snurby77
Не связанный с вашей проблемой, но если вы вообще не заботитесь о производительности, вы хотите пропустить «sqrt» и сравнить с квадратом расстояния, что-то вроде 'if (deltaX * deltaX + deltaY * deltaY <= 25) соответствует ++; '. –