因此,如果您查看我的其他帖子,毫不奇怪我正在构建一个可以在森林中收集数据并将其粘贴在 map 上的机器人。我们有算法可以检测树中心和树干直径,并将它们粘贴在笛卡尔 XY 平面上。我们计划使用某些“关键”树作为定位机器人的自然地标,使用三角测量和三边测量以及其他方法,但是仅使用 Matlab 对其进行编程并保持数据直接和高效变得困难。是否有一种技术可以对点的数组或矩阵进行子设置?假设我在 1km (1000m) 范围内存储了 1000 棵树,有没有办法说,只选择我当前位置半径 30m 内的点并只使用这些点?我只想使用 GIS,但我在 Matlab 中执行此操作,我不知道任何适用于 Matlab 的 GIS 插件。忘了说了,这段代码是上线的,意思是在机器人上实时执行。我不知道随着 map 增长到几英里,使用不同的数据结构是否会有所帮助,或者计算到随机点的每个距离是否是空间数据库将要做的事情。我正在考虑将树阵列镜像成两个数组,一个按 X 排序,另一个按 Y 排序。然后冒泡排序以确定其中的 30m 范围。我对两个数组 X 和 Y 执行相同操作,然后使用第三个交叉链接表来选择各个值。但我不知道,这叫什么,如何编程,我相信有人已经有了,所以我不想重新发明轮子。 Cartesian Plane GIS 最佳答案 计算所有距离并扫描通过的简单解决方案似乎几乎立即运行:lim = 1;num_trees = 1000;trees = randn(num_trees,2); %# list of trees as Nx2 matrixcur = randn(1,2); %# current point as 1x2 vectordists = hypot(trees(:,1) - cur(1), trees(:,2) - cur(2)); %# distance from all trees to current pointnearby = tree_ary((dists <= lim),:); %# find the nearby trees, pull them from the original matrix在 1.2 GHz 机器上,我可以在 您是否直接在机器人上运行 Matlab 代码?你在使用实时研讨会吗?如果您需要将其转换为 C,您可以将 hypot 替换为 sqr(trees[i].x - pos.x) + sqr(trees[i].y - pos.y) ,并将限制检查替换为 < lim^2 。如果你真的只需要处理1个KTree,我不知道你花时间去实现一个更复杂的数据结构是否值得。关于c++ - 选择矩阵中距离另一个点 30m 内的所有点,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2814858/
10-11 22:59