我有一个点矢量,我计算每个点之间的距离(P1P2,P1P3,P1P4,...... P1PN,P2P1,...,PMPN)。
现在我想要将点1的所有距离与每个其他点相加,然后将点2的所有距离相加到每个其他点,依此类推(P1P2 + P1P3 + ... + P1PN,P2P1 + P2P2 + ... + P2PN)将这些距离放入向量中。我现在陷入了我的for循环:
这是我的代码:
// Calculate mass centers
vector<Point2f> centroids_1;
// Calculate distances between all mass centers
vector<double> distance_vector;
for (int i = 0, iend = centroids_1.size(); i < iend; i++) {
for (int j = 0, jend = centroids_1.size(); j < jend; j++) {
double distance = norm(centroids_1[i] - centroids_1[j]);
distance_vector.push_back(distance);
// Here I tried many things with for loops and while loops but
// I couldn't find a proper solution
}
}
答案 0 :(得分:1)
使用标准库而不是raw循环。它将更容易阅读和维护。此外,指数是噪音。它们不是必需的用于迭代。
{{1}}
具体来说,我们使用range-based-for循环和std::accumulate
。这是您想要做的事情的描述。为每个点存储它与其他点之间的累积距离。
答案 1 :(得分:0)
你没有在任何地方添加distance
。在内循环的第一次迭代之后,第一个点的答案就准备就绪,你可以保存。
此外,您无需查找相同点之间的差异,因此请在i=j
for (int i = 0, iend = centroids_1.size(); i < iend; i++)
{
double distance=0.0;
for (int j = 0, jend = centroids_1.size(); j < jend; j++)
{
if(i==j)
continue;
distance+ = norm(centroids_1[i] - centroids_1[j]);
}
distance_vector.push_back(distance);
}
}