东莞seo建站如何推广/搜索引擎营销是什么

东莞seo建站如何推广,搜索引擎营销是什么,网站图片地址怎么做的,幻塔是哪家公司开发的八叉树与体素图 八叉树地图 八叉树地图是可变分辨率的三维栅格地图,可以自由调整分辨率,如下所示: 根据点云的数量或密度决定每个叶子方块是否被占据 体素图 体素就是固定分辨率的三维栅格地图,如下所示: 根据点云…

八叉树与体素图

八叉树地图

八叉树地图是可变分辨率的三维栅格地图,可以自由调整分辨率,如下所示:

根据点云的数量或密度决定每个叶子方块是否被占据

体素图

体素就是固定分辨率的三维栅格地图,如下所示:

根据点云的数量或密度决定每个体素是否被占据

八叉树地图与体素图的区别

最大的区别是八叉树地图是可变分辨率,体素图是固定分辨率,也就是说,在一定大小的三维空间内,体素图是按照最小的分割体积,将空间完整分割表达,数据结构简单,不过存储量更多一些,但是建图速度更快。

八叉树地图使用八叉树的数据结构来存储,对于一些没有点云或点云数量极少的空区域,可以不进行展开分割,只存储这一大块体积,而对点云有效,密集的区域进行进一步的分割存储,也就是所说的可变分辨率,这样做减少存储量,但数据结构复杂,通常情况下建图速度没有体素图快

八叉树地图适合做大地图的建模,因为地图较大的情况下,体素图会占据大量的空间,不利于存储,因此八叉树地图适合做全局地图建模,用于做全局规划

体素图因为数据结构简单,建模速度快,因此适合做局部小地图的建模,用于局部规划,做动态避障。

八叉树代码实现

以下是使用matlab编写的一个八叉树的实现

静态创建八叉树(点云固定空间大小)

主循环文件:

%*************************************************************************%%使用递归的方式根据真实点云数据静态创建八叉树(地图固定,不会越界)
%**********************************************************************%
clc;
clear;
%**********读取点云数据并进行下采样**********%
figure
filename = 'cloud.pcd';
pointCloud = pcread(filename);
% 下采样参数设置
gridSize = 2; % 下采样网格大小,根据需要进行调整  数值越大,砍掉的点越多
% 执行下采样
downsampledPtCloud = pcdownsample(pointCloud, 'gridAverage', gridSize);
[p_num, n] = size(downsampledPtCloud.Location);
pcshow(pointCloud);
% %显示下采样地图
% figure
% pcshow(downsampledPtCloud);
%****************建立八叉树**************%
%计算八叉树的根节点需要用到的参数
x_min = min(downsampledPtCloud.Location(:, 1));
y_min = min(downsampledPtCloud.Location(:, 2));
z_min = min(downsampledPtCloud.Location(:, 3));
x_max = max(downsampledPtCloud.Location(:, 1));
y_max = max(downsampledPtCloud.Location(:, 2));
z_max = max(downsampledPtCloud.Location(:, 3));
%以xyz点中最大最小值差异最大的作为边长
x_side = (x_max - x_min);
y_side = (y_max - y_min);
z_side = (z_max - z_min);
side = [x_side y_side z_side];
side_len = max(side) + 1;
%创建八叉树图
figure
xlabel('x');
ylabel('y');
zlabel('z');
view(3);  %设定为三维视角
Root = struct();   %创建一个空结构体
Root.isLeaf = false;  %是否是叶子节点 (叶子节点可能是障碍物,也可能不是)
Root.isOccupiedLeaf = false;  %是否是占据叶子
Root.value = 1;  %1表示有点云数据,可以继续分割
Root.index = 1;  %bitshift表示移位  编号,每一位分为8个节点,每一位的编号代表其位置
Root.x = x_min + x_side / 2;  %此节点方格的中心坐标
Root.y = y_min + y_side / 2;
Root.z = z_min + z_side / 2;
Root.level = 0;  %当前层数 根节点为第0层
Root.side_len = side_len;  %边长
Root.children = {};  %子节点
%***************根据精度创建八叉树(静态创建)********************%
%根据边长与方块边长的要求,计算需要创建多少深度的八叉树
n = 0;
l = side_len;
while l > 5l = l / 2;n = n + 1;
end
resolution_ratio = n;  %分辨率  向下分n层
obs_leaf = [];
obs_leaf_num = 0;
[Octree, obs_leaf, obs_leaf_num] = create_octree_static(Root, downsampledPtCloud.Location, p_num, resolution_ratio, 1, obs_leaf, obs_leaf_num);
%绘制八叉树地图
draw_obs_leaf_node(obs_leaf, obs_leaf_num, Root.x, Root.y, Root.z, side_len, resolution_ratio, z_min, z_max);

递归创建八叉树函数:

%*************************************************************************%%递归创建八叉树函数  任意层%输出:node--当前节点  p--点云数据%      num--点云数量  level_max--最大层数%      obs_leaf_index--存储叶子节点的编号%      obs_leaf_num--叶子节点数量
%**********************************************************************%
% 创建八叉树函数 
function [node, obs_leaf_index, obs_leaf_num] = create_octree_static(node, p, num, level_max, level_current, obs_leaf_index, obs_leaf_num)%若节点为空,则返回失败,根节点不能为空if isempty(node)return;%当前不是最大层级elseif level_current <= level_max%判断节点是否未被占据,即没有数据点在方块内if isNullPoint(node, p, num)%当前是有数据的叶子节点,并且当前层级为最大层级时,标记节点为占据叶子节点node.isLeaf = true; node.isOccupiedLeaf = false;node.value = 1;  node.children = {};else %非叶子节点  可以继续往下分割node.isLeaf = false; node.isOccupiedLeaf = false;node.value = 1;node.children = {};  %节点创建八个子节点%创建根节点的八个子节点  此为第一层  根节点为第0层node.children = create_sub_node(node, p, num, level_current, level_max);  %创建8个子节点  层级为1%递归创建树for i = 1:8[node.children{i}, obs_leaf_index, obs_leaf_num] = create_octree_static(node.children{i}, p, num, level_max, level_current+1, obs_leaf_index, obs_leaf_num);endendelseif level_current > level_max%判断节点是否被占据if isNullPoint(node, p, num)%当前是被占据的叶子节点,并且当前层级为最大层级时,标记节点为障碍物叶子节点node.isLeaf = true; node.isOccupiedLeaf = true;node.value = 1;  node.children = {}; obs_leaf_num = obs_leaf_num + 1;obs_leaf_index(obs_leaf_num) = node.index;elsenode.isLeaf = true; node.isOccupiedLeaf = false;node.value = 0;  node.children = {};             endreturn;end
end

判断是否是未被占据的节点:

%*************************************************************************%%判断节点是否未被占据,即空的
%**********************************************************************%
% 判断是否满足叶节点条件  node--节点   p--数据点集  num--数据点集数量
function result = isNullPoint(node, p, num)result = true;%检测节点的方块内是否有数据点for i = 1:numif (p(i, 1) < (node.x + (node.side_len / 2))) && ...(p(i, 1) >= (node.x - (node.side_len / 2))) && ...(p(i, 2) < (node.y + (node.side_len / 2))) && ...(p(i, 2) >= (node.y - (node.side_len / 2))) && ...(p(i, 3) < (node.z + (node.side_len / 2))) && ...(p(i, 3) >= (node.z - (node.side_len / 2)))result = false;break;  %检测到有便可以退出endend
end

绘图函数:

%*************************************************************************%%绘制叶子节点 %输入:index--叶子节点编号  index_num--叶子节点数量%      root_x,root_y,root_z--根节点坐标  root_side_len--根节点边长(最大的方块边长)%      level--八叉树深度  min_z--最小高度  max_z--最大高度(用于根据高度渐变颜色)%  注意:画图时,需要计算方块的左下前坐标(即8个顶点中,各坐标值最小的)
%**********************************************************************%
%******************%
%    以最大的方块为第一层的根
%    编号规则(顺时针):
%     底层:  2 3
%            1 4
%     顶层:  6 7
%            5 8
%********************%
function draw_obs_leaf_node(index, index_num, root_x, root_y, root_z, root_side_len, level, z_min, z_max)%计算边长for i = 1:index_num%根据编号计算坐标;index_current = floor(index(i) / 10);  %第一层为根节点,可以忽略x = root_x;y = root_y;z = root_z;side_len = root_side_len;for j = 1:levelindex_level = mod(index_current, 10); % 取余side_len = side_len/2;switch index_levelcase 1x = x - side_len / 2;y = y - side_len / 2;z = z - side_len / 2;case 2x = x - side_len / 2;y = y + side_len / 2;z = z - side_len / 2;case 3x = x + side_len / 2;y = y + side_len / 2;z = z - side_len / 2;case 4x = x + side_len / 2;y = y - side_len / 2;z = z - side_len / 2;case 5x = x - side_len / 2;y = y - side_len / 2;z = z + side_len / 2;case 6x = x - side_len / 2;y = y + side_len / 2;z = z + side_len / 2;case 7x = x + side_len / 2;y = y + side_len / 2;z = z + side_len / 2;case 8x = x + side_len / 2;y = y - side_len / 2;z = z + side_len / 2;endindex_current = floor(index_current / 10);end%计算最终画图的坐标draw_x = x - side_len/2;draw_y = y - side_len/2;draw_z = z - side_len/2;%根据不同的高度绘制不同的颜色cmap = jet; % 使用 jet 色图,可以根据需要选择其他色图z_normalized = (z - z_min) / (z_max - z_min); % 将高度归一化到 [0, 1] 范围color = ind2rgb(round(z_normalized * (size(cmap, 1) - 1)) + 1, cmap); % 将归一化的高度值映射到颜色映射中draw_cube(draw_x, draw_y, draw_z, side_len, color);end
end

之后是采集了一些点云来进行了验证,因为大小是固定的,因此是静态创建八叉树的效果:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/72214.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

最节省服务器,手搓电子证书查询系统

用户预算150元&#xff0c;想要一个最简单证书查询系统。前台能查询证书、后台管理员能登录能修改密码&#xff0c;证书能够手动输入修改删除、批量导入导出删除数据、查询搜索。能够兼容苹果、安卓、PC三端浏览器&#xff0c;最后帮忙部署到云服务器上。 用户预算不多&#xf…

什么是全栈?

&#x1f91f;致敬读者 &#x1f7e9;感谢阅读&#x1f7e6;笑口常开&#x1f7ea;生日快乐⬛早点下班 &#x1f4d8;博主相关 &#x1f7e7;博主信息&#x1f7e8;博客首页&#x1f7eb;专栏推荐&#x1f7e5;活动信息 &#x1f4c3;文章前言 &#x1f537;文章均为学习工…

【文献阅读】SPRec:用自我博弈打破大语言模型推荐的“同质化”困境

&#x1f4dc;研究背景 在如今的信息洪流中&#xff0c;推荐系统已经成为了我们生活中的“贴心小助手”&#xff0c;无论是看电影、听音乐还是购物&#xff0c;推荐系统都在努力为我们提供个性化的内容。但这些看似贴心的推荐背后&#xff0c;其实隐藏着一个严重的问题——同质…

使用1Panel一键搭建WordPress网站的详细教程(全)

嘿&#xff0c;各位想搭建自己网站的朋友们&#xff01;今天我要跟大家分享我用1Panel搭建WordPress网站的全过程。说实话&#xff0c;我之前对服务器运维一窍不通&#xff0c;但通过这次尝试&#xff0c;我发现原来建站可以这么简单&#xff01;下面是我的亲身经历和一些小技巧…

本地fake server,

C# 制作的系统级tcp 重定向&#xff0c;整个系统只要有访问指定url&#xff0c;返回自定义内容到访问端。不局限在浏览器单一方面。 再者请理解这个图的含金量&#xff0c;服务器down机都可以模拟。 用途那就太多了&#xff0c;当然很多用途都不正当。嘿嘿 如果你很想要源代…

设计模式之美

UML建模 统一建模语言&#xff08;UML&#xff09;是用来设计软件的可视化建模语言。它的语言特点是简单 统一 图形化 能表达软件设计中的动态与静态信息。 UML的分类 动态结构图&#xff1a; 类图 对象图 组件图 部署图 动态行为图&#xff1a; 状态图 活动图 时序图 协作…

【openGauss】物理备份恢复

文章目录 1. gs_backup&#xff08;1&#xff09;备份&#xff08;2&#xff09;恢复&#xff08;3&#xff09;手动恢复的办法 2. gs_basebackup&#xff08;1&#xff09;备份&#xff08;2&#xff09;恢复① 伪造数据目录丢失② 恢复 3. gs_probackup&#xff08;1&#xf…

一文了解JVM的垃圾回收

Java堆内存结构 java堆内存是垃圾回收器管理的主要区域&#xff0c;也被称为GC堆。 为了方便垃圾回收&#xff0c;堆内存被分为新生代、老年代和永久代。 新创建的对象的内存会在新生代中分配&#xff0c;达到一定存活时长后会移入老年代&#xff0c;而永久代存储的是类的元数…

SQL子查询与MyBatis映射

文章目录 前言1. 数据库表结构2. MyBatis Mapper XML3. Java 实体类4. 技术点解析5. 执行效果6. 优化建议 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; 以下是一个结合 SQL 别名、子查询、MyBatis 字段映射和代码复用的完整案例&#xff0c;以用户管…

基于SpringBoot的“校园周边美食探索及分享平台”的设计与实现(源码+数据库+文档+PPT)

基于SpringBoot的“校园周边美食探索及分享平台”的设计与实现&#xff08;源码数据库文档PPT) 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;SpringBoot 工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 校园周边美食探索及分享平台结构图…

双指针算法专题之——复写零

文章目录 题目介绍思路分析异地复写优化为就地复写 AC代码 题目介绍 链接: 1089. 复写零 思路分析 那么这道题我们依然可以使用双指针算法来解决 异地复写 先不考虑题目的要求&#xff0c;直接就地在原数组上修改&#xff0c;可能不太好想&#xff0c;我们这里可以先在一个…

搭建阿里云专有网络VPC

目录 一、概述 二、专有网络vpc 2.1 vpc基本信息 2.2 vpc资源管理 2.3 vpc网段管理 三、交换机 四、NAT网关 4.1 绑定弹性公网IP 4.2 NAT网关信息 4.3 绑定的弹性公网IP 4.4 DNAT 4.5 SNAT 五、弹性公网IP 六、访问控制ACL&#xff08;绑定交换机&#xff09; 6…

阿里巴巴发布 R1-Omni:首个基于 RLVR 的全模态大语言模型,用于情感识别

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

聚划算!三个模型对比预测!CNN-GRU、GRU、CNN三模型多变量时序光伏功率预测

聚划算&#xff01;三个模型对比预测&#xff01;CNN-GRU、GRU、CNN三模型多变量时序光伏功率预测 目录 聚划算&#xff01;三个模型对比预测&#xff01;CNN-GRU、GRU、CNN三模型多变量时序光伏功率预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 CNN-GRU、GRU、CN…

小白学习:提示工程(什么是prompt)

课程链接 https://www.bilibili.com/video/BV1PX9iYQEry/?spm_id_from333.337.search-card.all.click 一 什么是提示工程 【提示工程】也叫【指令工程】 prompt就是给大模型发的指令&#xff0c;如“给我讲个笑话” 懂得提示工程原理会带来什么优势 懂得原理 为什么有的指…

C语言 —— 此去经年梦浪荡魂音 - 深入理解指针(卷一)

目录 1. 内存和地址 2. 指针变量和地址 2.1 取地址操作符&#xff08;&&#xff09; 2.2 指针变量 2.3 解引用操作符 &#xff08;*&#xff09; 3. 指针的解引用 3.1 指针 - 整数 3.2 void* 指针 4. const修饰指针 4.1 const修饰变量 4.2 const修饰指针变量 5…

机器视觉工程师红外相机的选择:红外长波工业相机和短波红外工业相机玄机大总结

红外长波(LWIR)和短波(SWIR)工业相机在原理、应用场景和技术特点上有显著差异。以下是它们的对比分析: 1. 波长范围与成像原理 2. 技术特点 3. 典型应用场景 4. 优缺点对比 LWIR优势: 无需光照,适用于完全黑暗环境。 直接反映物体温度分布。 对烟雾、灰尘穿透能力强。…

uni-app学习笔记——自定义模板

一、流程 1.这是一个硬性的流程&#xff0c;只要按照如此程序化就可以实现 二、步骤 1.第一步 2.第二步 3.第三步 4.每一次新建页面&#xff0c;都如第二步一样&#xff1b;可以选择自定义的模版&#xff08;vue3Setup——这是我自己的模版&#xff09;&#xff0c;第二步的…

DeepSeek模型本地化部署方案及Python实现

DeepSeek实在是太火了&#xff0c;虽然经过扩容和调整&#xff0c;但反应依旧不稳定&#xff0c;甚至小圆圈转半天最后却提示“服务器繁忙&#xff0c;请稍后再试。” 故此&#xff0c;本文通过讲解在本地部署 DeepSeek并配合python代码实现&#xff0c;让你零成本搭建自己的AI…

python-leetcode-删除链表的倒数第 N 个结点

LCR 021. 删除链表的倒数第 N 个结点 - 力扣&#xff08;LeetCode&#xff09; 可以使用双指针方法来解决这个问题&#xff0c;这样可以在一次遍历内完成删除操作&#xff0c;从而达到 O(n) 的时间复杂度。以下是 Python 代码实现&#xff1a; 解题思路&#xff1a; 初始化快…