我很不擅长数学,但我需要找到所有靠近通过该空间的矢量射影的3D空间中的点。可以按任何算法所需的方式存储这些点,但我想不出任何特别有利的排序方法。是否有现成的C ++算法来完成此任务?如果有(或没有),它涉及哪种数学概念,因为我想试图理解它并将自己变成一个椒盐卷心酥。该算法将在可能包含100,000个点的空间中操作,需要测试约1,000,000个向量,并在1/30秒内完成这些向量。当然,我怀疑是否有任何算法能够完成功绩,但看看是否真的如此会很有趣。
您可能希望将点存储在某些空间数据结构中。我想到的有:
它们具有略微不同的属性。八叉树将整个世界划分为8个大小相等的立方体,组织成一个更大的立方体。然后将每个立方体分成 8 个大小均匀的立方体。您继续分割立方体,直到在一个立方体中的点数少于某个特定数量。使用这个树结构,您可以很容易地遍历树,并提取可能与给定立方体相交的所有点。一旦您获得了该点列表,就可以逐个测试这些点。由于测试几何结构是一个球体(距离一个点),因此您会在球体周围画一个正方体,并获取可能与其相交的点。作为优化,您还可以在圆圈内部绘制一个正方体,任何肯定与之相交的物体都可以立即包含在您的命中集合中。当你把八叉树看作一条曲线时,可能会有助于你理解它是如何填充空间的,只经过每个坐标一次且不交叉。这条曲线将三维复杂性映射到一维复杂性。其中有一些怪物曲线,例如z曲线、希尔伯特曲线和摩尔曲线。后者是4个希尔伯特曲线的副本,并具有非常好的空间填充质量。但是,最近点的搜索不是使用迪杰斯特拉算法解决的吗?