我有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