如何将距离彼此相距的3D点组合在一起

时间:2016-07-12 09:31:32

标签: c++ 3d coordinates

所以我有一个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点时继续重新启动该函数。我希望有人可以帮我找到一种更简单的方法。

我已经做了很多其他功能,但是它们崩溃了,这是迄今为止唯一正在工作的(或者至少我希望它的工作大声笑,它只是不会崩溃,这是一个好兆头)。

1 个答案:

答案 0 :(得分:0)

  1. 编写一个函数,将两个点作为参数,并确定它们是否在一定距离内或使用一个类" Point"使用一种方法检查作为参数传递的点是否在此点的距离x内。

  2. 将所有点存储在一个简单的向量中,以表示您的" blob"。

  3. 一个简单的幼稚课程可能如下所示:

    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矢量中。 你选择的当然。