所以我有一个3D点列表,我希望将彼此在1个单位或更少内的点组合在一起。所以这里是我正在讨论的一个例子(我将使用2D点作为例子),
假设我们有点1:(0,0)和点2:(0,1)彼此相距1个距离。该程序将存储在一个向量中。现在这是第三点(0,2)。此点距离点2的距离为1,但不是距离点1,但程序仍将存储它,因为距离矢量中的至少1个点距离1个距离。
所以我想在“blob”中收集3D点,并且这个“blob”中1个单位或更少的所有内容都会被添加到“blob”
过去几天我尝试了很多不同的功能,尝试了递归,但总是崩溃并嵌套了大量的forloops,但我无法做到这一点。
这是我的代码(我在代码旁边的评论中添加了以便于理解)
Book
我使用了所有的中断,因为当从allPoints中删除一个点时,它会使forloops混乱,因为我使用.size()来运行它的次数。这使程序真的很慢,因为它必须在找到1点时继续重新启动该函数。我希望有人可以帮我找到一种更简单的方法。
我已经做了很多其他功能,但是它们崩溃了,这是迄今为止唯一正在工作的(或者至少我希望它的工作大声笑,它只是不会崩溃,这是一个好兆头)。
答案 0 :(得分:0)
编写一个函数,将两个点作为参数,并确定它们是否在一定距离内或使用一个类" Point"使用一种方法检查作为参数传递的点是否在此点的距离x内。
将所有点存储在一个简单的向量中,以表示您的" blob"。
一个简单的幼稚课程可能如下所示:
class Point{
public:
bool withinDistance(const Point& other) const;
void addProxyPoint(const Point& other);
private:
double x_cord, y_cord, ...;
std::vector<Point> proximities;
};
虽然您可以通过其他几种方式执行此操作,尤其是如果您不想将blob存储在点对象本身上。 或者,您可以编写一种方法来检查点是否在距离内,并将其添加到blob矢量中。 你选择的当然。