我有2个向量,其中一个(结构体(点)的vector1)填充了X点数量,另一个(结构体的vector2(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
你*知道*你应该越来越多?基于什么?你有样品输入和预期的输出,显示你的代码没有做你想要的吗? – 2014-10-31 00:32:10
嗨格雷格,我有样品输出。这是点匹配。这也在2循环内运行。所以忽略这些匹配从不重置。 – snurby77 2014-10-31 00:33:50
与您的问题无关,但如果您关心的是性能,您希望跳过'sqrt'并与距离平方比较,就像'if(deltaX * deltaX + deltaY * deltaY <= 25)匹配++; '。 – 2014-10-31 00:39:00