我有一个笛卡尔平面上的点列表和一个测试点。我想找到最接近测试点的三个点的列表索引。找到这些索引的更好方法是什么?提前感谢您的旅游回复。
=== 编辑 ===
我在 C++ 中找到了解决方案。首先我创建一个向量:
typedef struct
{
int iIndex;
double dSqrDistance;
} IndexedDistance;
std::vector<IndexedDistance> xDistanceVector;
然后是一个对其元素进行排序的函数
bool compareIndexedDistance(IndexedDistance xD1, IndexedDistance xD2)
{
return (xD1.dSqrDistance < xD2.dSqrDistance);
}
然后在一个循环中计算所有距离,然后对它们进行排序,最后我取前三个元素:
IndexedDistance xDistanceElement;
for (int i = 0; i < xPointList.size(); i++)
{
dSqrDistance = xPointList.at(i).sqrDistance(xTestPoint);
xDistanceElement.iIndex = i;
xDistanceElement.dSqrDistance = dSqrDistance;
xDistanceVector.push_back(xDistanceElement);
}
std::sort(xDistanceVector.begin(), xDistanceVector.end(), compareIndexedDistance);
xDistanceVector.resize(3);
就这样,我找到了我需要的东西。我不知道这是否是最好的方法,但它似乎有效。