SVG(Scalable Vector Graphics)全面解析

一、基础概念

  • 矢量图形:SVG使用数学公式描述图形,因此可以无限缩放而不失真。

  • XML格式:SVG文件是纯文本,使用XML语法,易于编辑和生成。

  • 分辨率无关:适合高分辨率显示,如Retina屏幕。

  • 文件体积小:适合网络传输。

 二、基本图形元素

 1.简单几何图形

 矩形 (<rect>)
<svg width="200" height="100"><rect x="10" y="10" width="180" height="80" fill="blue" stroke="black" stroke-width="2" />
</svg>
  • xy:矩形左上角坐标。

  • widthheight:矩形的宽度和高度。

  • fill:填充颜色。

  • stroke:描边颜色。

  • stroke-width:描边宽度。

 圆形 (<circle>)
<svg width="200" height="200"><circle cx="100" cy="100" r="80" fill="red" stroke="black" stroke-width="3" />
</svg>
  • cxcy:圆心坐标。

  • r:半径。

 椭圆 (<ellipse>)
<svg width="200" height="100"><ellipse cx="100" cy="50" rx="90" ry="40" fill="green" stroke="black" stroke-width="2" />
</svg>
  • rxry:椭圆在x轴和y轴上的半径。

 直线(<line>
<line x1="10" y1="10" x2="50" y2="50" />

 x1y1为起点坐标,x2y2为终点坐标,绘制出一条从 (10, 10) 到 (50, 50) 的直线。

 折线(<polyline>

 通过points属性定义一系列点,连接成折线。如

<polyline points="10,10 30,30 50,10" />

依次连接 (10, 10)、(30, 30)、(50, 10) 形成折线。

 多边形(<polygon>

 同样使用points属性定义多个点,最后一点自动连接到第一点形成封闭图形。例如

<polygon points="10,10 30,30 50,10" />

构成一个封闭的三角形。

 2.路径(<path>

 路径元素是 SVG 中最强大的图形定义工具,可绘制复杂图形。通过一系列绘图命令描述路径形状。

<svg width="200" height="200"><path d="M10 10 L100 100 Q150 50 200 100" fill="none" stroke="purple" stroke-width="3" />
</svg>
  • d:定义路径的指令。

    • M:移动到某点。

    • L:画直线。

    • Q:画二次贝塞尔曲线。

<path d="M10,10 L50,10 L30,30 L50,50 L10,50 Z" 
fill="blue" stroke="black" stroke - width="1"/>
  • d属性中的命令依次为:M10,10将画笔移动到 (10, 10);L50,10从当前点绘制直线到 (50, 10);L30,30继续绘制直线到 (30, 30);L50,50绘制到 (50, 50);L10,50绘制到 (10, 50);
  • Z表示闭合路径。通过fill属性填充蓝色,strokestroke - width设置黑色边框及宽度为 1。

 绘制一个心形

<svg width="200" height="200"><path d="M100 20 C50 0, 0 50, 100 150 C200 50, 150 0, 100 20 Z" fill="red" />
</svg>

 

 三、文本元素

 1.基本文本添加

 <text>元素用于在 SVG 图形中添加文本。通过xy属性指定文本起始位置,并设置字体相关属性。例如:

<svg width="200" height="100"><text x="10" y="50" font-family="Arial" font-size="24" fill="orange">Hello SVG!</text>
</svg>
  • xy:文本的起始坐标。

  • font-family:字体。

  • font-size:字体大小。

 2. 文本沿路径排列

结合<textPath>元素,可使文本沿着指定路径排列。例如:

<path id="myPath" d="M 50,100 C 100,0 300,0 350,100" stroke="gray" fill="none"/>
<text><textPath xlink:href="#myPath">This text follows a curved path.</textPath>
</text>

先定义了一条三次贝塞尔曲线路径myPath,然后<textPath>通过xlink:href属性引用该路径,使文本 “This text follows a curved path.” 沿着曲线排列。

 四、图形样式与属性

 1.填充与描边

 填充(fill):决定图形内部颜色,可使用颜色关键字(如red)、十六进制值(如#FF0000)、RGB 或 RGBA 值(如rgb(255, 0, 0)rgba(255, 0, 0, 0.5))等。

<rect x="10" y="10" width="50" height="50" fill="green" />

 描边(stroke):设置图形轮廓的颜色和样式。stroke指定颜色,stroke - width设置线条宽度,stroke - dasharray创建虚线样式。

<rect x="10" y="10" width="50" height="50" 
stroke="red" stroke - width="2" stroke - dasharray="5, 5" />

绘制出一个红色边框、宽度为 2,且为虚线(线段长度 5,间距 5)的矩形。

 2.变换属性

 平移(translate)transform="translate(x, y)"使图形在二维平面上沿 x 和 y 方向移动。例如,

<rect x="0" y="0" width="50" height="50" transform="translate(10, 20)" />

 将原本位于 (0, 0) 的矩形移动到 (10, 20) 的位置。

 旋转(rotate)transform="rotate(angle, [cx, cy])"angle为旋转角度,cxcy可选,用于指定旋转中心(默认以图形中心旋转)。

<rect x="0" y="0" width="50" height="50" transform="rotate(45)" />

将矩形绕自身中心顺时针旋转 45 度。

 缩放(scale)transform="scale(sx, [sy])"sx为水平缩放因子,sy可选,默认与sx相同。例如,

<rect x="0" y="0" width="50" height="50" transform="scale(2)" />

 使矩形在水平和垂直方向上均放大为原来的 2 倍。

 倾斜(skewX/skewY)transform="skewX(angle)"transform="skewY(angle)"使图形沿 x 或 y 轴倾斜。例如,

<rect x="0" y="0" width="50" height="50" transform="skewX(30)" />

 让矩形沿 x 轴倾斜 30 度。

五、渐变和图案

1.线性渐变 (<linearGradient>)

线性渐变是沿着一条直线方向,从一个颜色平滑过渡到另一个颜色。

<svg width="200" height="100"><defs><linearGradient id="grad1" x1="0%" y1="0%" x2="100%" y2="0%"><stop offset="0%" style="stop-color:rgb(255,0,0);stop-opacity:1" /><stop offset="100%" style="stop-color:rgb(0,0,255);stop-opacity:1" /></linearGradient></defs><rect x="10" y="10" width="180" height="80" fill="url(#grad1)" />
</svg>
  1. <defs> 标签

    • 用于定义可重用的图形元素(如渐变、滤镜等)。

    • 定义的渐变不会直接显示,需要被引用。

  2. <linearGradient> 标签

    • 定义一个线性渐变。

    • id="grad1":为渐变设置一个唯一标识符,方便后续引用。

    • x1y1x2y2:定义渐变的方向。

      • x1="0%" y1="0%":渐变的起点(左上角)。

      • x2="100%" y2="0%":渐变的终点(右上角)。

      • 这里表示渐变从左到右水平方向。

  3. <stop> 标签

    • 定义渐变中的颜色节点。

    • offset:颜色的位置(百分比)。

      • offset="0%":渐变的起点颜色。

      • offset="100%":渐变的终点颜色。

    • style="stop-color:rgb(255,0,0)":定义颜色(这里是红色)。

    • stop-opacity:定义颜色的透明度(1 表示完全不透明)。

  4. 引用渐变

    • 在 <rect> 中使用 fill="url(#grad1)",将渐变应用到矩形中。

   效果: 

  • 矩形从左到右,颜色从红色渐变到蓝色。

 2. 径向渐变 (<radialGradient>)

 径向渐变是从一个中心点向外辐射的渐变,颜色从中心向外平滑过渡。

<svg width="200" height="200"><defs><radialGradient id="grad2" cx="50%" cy="50%" r="50%" fx="50%" fy="50%"><stop offset="0%" style="stop-color:rgb(255,255,0);stop-opacity:1" /><stop offset="100%" style="stop-color:rgb(255,0,0);stop-opacity:1" /></radialGradient></defs><circle cx="100" cy="100" r="80" fill="url(#grad2)" />
</svg>
  • 圆形从中心向外,颜色从黄色渐变到红色。

  1. <defs> 标签

    • 同样用于定义可重用的图形元素。

  2. <radialGradient> 标签

    • 定义一个径向渐变。

    • id="grad2":为渐变设置一个唯一标识符。

    • cxcy:定义渐变的中心点(这里是 50% 50%,即中心)。

    • r:定义渐变的半径(这里是 50%,表示渐变覆盖整个图形)。

    • fxfy:定义渐变的焦点(这里是 50% 50%,与中心点重合)。

  3. <stop> 标签

    • 定义渐变中的颜色节点。

    • offset="0%":渐变的中心颜色(黄色)。

    • offset="100%":渐变的边缘颜色(红色)。

    • stop-color:定义颜色。

    • stop-opacity:定义颜色的透明度。

  4. 引用渐变

    • 在 <circle> 中使用 fill="url(#grad2)",将渐变应用到圆形中。

 六、 SVG滤镜效果

 1. 滤镜的基本结构

 SVG滤镜通过 <filter> 标签定义,并在图形中引用。以下是滤镜的基本结构:

<svg width="200" height="200"><defs><!-- 定义滤镜 --><filter id="myFilter"><!-- 滤镜效果(如模糊、阴影等) --><feGaussianBlur in="SourceGraphic" stdDeviation="5" /></filter></defs><!-- 引用滤镜 --><rect x="10" y="10" width="180" height="180" fill="yellow" filter="url(#myFilter)" />
</svg>
  1. <defs> 标签

    • 用于定义可重用的元素(如滤镜、渐变等)。

    • 定义的滤镜不会直接显示,需要被引用。

  2. <filter> 标签

    • 定义一个滤镜。

    • id="myFilter":为滤镜设置一个唯一标识符,方便后续引用。

  3. <feGaussianBlur> 标签

    • 这是滤镜的一种效果,表示高斯模糊。

    • in="SourceGraphic":表示滤镜应用于原始图形。

    • stdDeviation="5":模糊的强度,值越大越模糊。

  4. 引用滤镜

    • 在 <rect> 中使用 filter="url(#myFilter)",将滤镜应用到矩形中。

 2. 常用滤镜效果

 SVG提供了多种滤镜效果,以下是一些常见的滤镜:

1 高斯模糊 (<feGaussianBlur>)
  • 作用:为图形添加模糊效果。

  • 示例

<svg width="200" height="200"><defs><filter id="blur"><feGaussianBlur in="SourceGraphic" stdDeviation="5" /></filter></defs><rect x="10" y="10" width="180" height="180" fill="yellow" filter="url(#blur)" />
</svg>
  • stdDeviation="5":模糊强度为5。

2 阴影 (<feDropShadow>)
  • 作用:为图形添加阴影效果。

  • 示例

<svg width="200" height="200"><defs><filter id="shadow"><feDropShadow dx="5" dy="5" stdDeviation="3" flood-color="black" flood-opacity="0.7" /></filter></defs><rect x="10" y="10" width="180" height="180" fill="yellow" filter="url(#shadow)" />
</svg>
  • dx="5":阴影在x轴方向的偏移。

  • dy="5":阴影在y轴方向的偏移。

  • stdDeviation="3":阴影的模糊强度。

  • flood-color="black":阴影颜色。

  • flood-opacity="0.7":阴影透明度。

3 颜色矩阵 (<feColorMatrix>)
  • 作用:调整图形的颜色(如灰度、对比度等)。

  • 示例

<svg width="200" height="200"><defs><filter id="grayscale"><feColorMatrix type="saturate" values="0" /></filter></defs><rect x="10" y="10" width="180" height="180" fill="yellow" filter="url(#grayscale)" />
</svg>
  • type="saturate":表示调整饱和度。

  • values="0":将饱和度设为0,使图形变为灰度。

4 发光效果 (<feGaussianBlur> + <feMerge>)
  • 作用:为图形添加发光效果。

  • 示例

<svg width="200" height="200"><defs><filter id="glow"><feGaussianBlur in="SourceAlpha" stdDeviation="5" result="blur" /><feMerge><feMergeNode in="blur" /><feMergeNode in="SourceGraphic" /></feMerge></filter></defs><rect x="10" y="10" width="180" height="180" fill="yellow" filter="url(#glow)" />
</svg>
  • feGaussianBlur:先对图形进行模糊处理。

  • feMerge:将模糊后的图形和原始图形合并,形成发光效果。

 3. 滤镜的组合使用

 多个滤镜效果可以组合使用,形成更复杂的效果。

 示例:模糊 + 阴影

<svg width="200" height="200"><defs><filter id="blurAndShadow"><!-- 模糊效果 --><feGaussianBlur in="SourceGraphic" stdDeviation="3" result="blur" /><!-- 阴影效果 --><feDropShadow in="blur" dx="5" dy="5" stdDeviation="2" flood-color="black" flood-opacity="0.7" /></filter></defs><rect x="10" y="10" width="180" height="180" fill="yellow" filter="url(#blurAndShadow)" />
</svg>
  • result="blur":将模糊结果保存为中间结果。

  • in="blur":将阴影效果应用到模糊后的图形。

 4. 滤镜的工作原理

  • 输入和输出

    • 每个滤镜效果都有一个输入(in)和输出(result)。

    • 输入可以是原始图形(SourceGraphic)或其他滤镜的结果。

    • 输出可以传递给下一个滤镜效果。

  • 链式处理

    • 滤镜效果可以按顺序组合,形成复杂的视觉效果。

5. 总结

  • <filter>:用于定义滤镜。

  • 滤镜效果:如模糊、阴影、颜色调整等。

  • 引用滤镜:通过 filter="url(#id)" 将滤镜应用到图形。

  • 组合使用:多个滤镜可以组合,形成更复杂的效果。

 七、动画与交互

 1.SMIL 动画

<svg width="200" height="100"><rect x="10" y="10" width="50" height="50" fill="blue"><animate attributeName="x" from="10" to="150" dur="2s" repeatCount="indefinite" /></rect>
</svg>
  • attributeName:需要动画的属性(如xywidth等)。

  • fromto:动画的起始和结束值。

  • dur:动画持续时间。

  • repeatCount:动画重复次数。

 2. JavaScript 交互

 将 SVG 嵌入 HTML 页面后,可利用 JavaScript 实现交互功能。例如,通过点击改变矩形颜色:

<svg id="mySvg" width="100" height="100"><rect id="myRect" x="10" y="10" width="50" height="50" fill="blue" />
</svg>
<script>const rect = document.getElementById('myRect');rect.addEventListener('click', function() {this.style.fill ='red';});
</script>

 通过getElementById获取 SVG 中的矩形元素,然后使用addEventListener监听点击事件,在事件处理函数中改变矩形的填充颜色。

 3. SVG 的交互性

 鼠标悬停效果

<svg width="200" height="100"><rect x="10" y="10" width="180" height="80" fill="blue" onmouseover="this.setAttribute('fill', 'red')" onmouseout="this.setAttribute('fill', 'blue')" />
</svg>
  • onmouseover 和 onmouseout:鼠标悬停和离开时触发的事件。

 八、SVG 的嵌入和使用

 1.直接嵌入HTML

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>SVG Example</title>
</head>
<body><svg width="200" height="100"><circle cx="100" cy="50" r="40" fill="orange" /></svg>
</body>
</html>

2.外部引用

<img src="example.svg" alt="Example SVG">

 九、SVG 的应用场景

 1.Web 设计

  • 响应式图标:SVG 图标可在不同分辨率屏幕上清晰显示,且文件体积小,能有效提升网页加载速度。网站的导航栏图标、按钮图标等常采用 SVG 格式。
  • 页面装饰图形:用于创建各种装饰性图案、背景纹理等,可通过 CSS 灵活控制样式,增强页面视觉效果。

 2.数据可视化

  • 统计图表:如柱状图、折线图、饼图等,可根据数据动态生成 SVG 图形。例如,展示不同城市的人口数量,可使用柱状图,每个柱子对应一个城市,柱子高度表示人口数量,方便直观地比较数据。
  • 地图绘制:能够精确绘制地图轮廓、标注地理信息等,且在缩放地图时保持清晰度,广泛应用于在线地图服务。

 3.移动应用

  • 界面设计:为移动应用提供高质量的矢量图形资源,适配不同尺寸和分辨率的移动设备屏幕,确保在各种手机、平板上都能呈现出一致、精美的视觉效果。

 十、SVG 的优势

  • 分辨率无关:适合高分辨率显示。

  • 文件体积小:适合网络传输。

  • 可交互性:支持丰富的用户交互和动画效果。

 十一、SVG 的工具和库

  • 编辑工具:Adobe Illustrator、Inkscape。

  • JavaScript库:D3.js、Snap.svg。

 

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

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

相关文章

go语言zero框架通过chromedp实现网页在线截图的设计与功能实现

在 GoZero 框架中实现网页在线截图的功能&#xff0c;可以通过集成 chromedp 库来控制 Chrome 浏览器进行截图。chromedp 是一个基于 Chrome DevTools 协议的 Go 包&#xff0c;可以用来在 Go 程序中模拟浏览器操作&#xff0c;如页面截图、DOM 操作、表单提交等。 下面是一个…

【Django开发】django美多商城项目完整开发4.0第12篇:商品部分,表结构【附代码文档】

本教程的知识点为&#xff1a; 项目准备 项目准备 配置 1. 修改settings/dev.py 文件中的路径信息 2. INSTALLED_APPS 3. 数据库 用户部分 图片 1. 后端接口设计&#xff1a; 视图原型 2. 具体视图实现 用户部分 使用Celery完成发送 判断帐号是否存在 1. 判断用户名是否存在 后…

HarmonyOS应用开发-低代码开发登录页面(超详细)

本篇文章我来手把手教大家做一个HarmonyOS 应用的登录页面&#xff0c;逐步讲解&#xff0c;非常细致&#xff0c;百分百能学会&#xff0c;并提供全部源码。页面使用 DevEco Studio 的低代码开发。 通过本文的实践经验&#xff0c;我想告诉大家&#xff0c; HarmonyOS 应用开发…

Reactive StreamsReactor Core

Reactive Streams&Reactor Core 一、概述1、问题2、优势3、发展 二、Reactive Streams1、依赖2、API 三、Project Reactor1、概述2、并发模型3、入门1&#xff09;依赖2&#xff09;Flux和Mono3&#xff09;空流&错误流 4、订阅响应式流1&#xff09;常见订阅2&#xf…

【数据分享】1929-2024年全球站点的逐日平均气温数据(Shp\Excel\免费获取)

气象数据是在各项研究中都经常使用的数据&#xff0c;气象指标包括气温、风速、降水、湿度等指标&#xff0c;其中又以气温指标最为常用&#xff01;说到气温数据&#xff0c;最详细的气温数据是具体到气象监测站点的气温数据&#xff01;本次我们为大家带来的就是具体到气象监…

简单介绍JSONStream的使用

地址 作用 这个模块是根据需要筛选出json数据中自己所需要的数据 使用 var JSONStream require("JSONStream"); var parse require("fast-json-parse"); var fs require("fs");fs.createReadStream("./time.json").pipe(JSONSt…

信息奥赛一本通 1168:大整数加法

这道题是一道大整数加法&#xff0c;涉及到高精度的算法&#xff0c;比如说有两个数要进行相加&#xff0c;1111111111111111111111111111111111111112222222222222222222222222222222&#xff0c;那么如果这两个数很大的话我们常用的数据类型是不能进行计算的&#xff0c;那么…

架构思考与实践:从通用到场景的转变

在当今复杂多变的商业环境中&#xff0c;企业架构的设计与优化成为了一个关键议题。本文通过一系列随笔&#xff0c;探讨了业务架构的价值、从通用架构到场景架构的转变、恰如其分的架构设计以及如何避免盲目低效等问题。通过对多个实际案例的分析&#xff0c;笔者揭示了架构设…

[JavaScript] 运算符详解

文章目录 算术运算符&#xff08;Arithmetic Operators&#xff09;注意事项&#xff1a; 比较运算符&#xff08;Comparison Operators&#xff09;注意事项&#xff1a; 逻辑运算符&#xff08;Logical Operators&#xff09;短路运算&#xff1a;逻辑运算符的返回值&#xf…

Java测试开发平台搭建(九)前端

1. 搭建前端vue环境 Vue3 安装 | 菜鸟教程 2. 创建项目 1.进入ui vue ui 2. create项目 3. 成功之后添加插件&#xff1a; cli-plugin-router vue-cli-plugin-vuetify 4. 添加依赖 axios 5. 点击任务开始运行 如果报错&#xff1a; 修改vue.config.jsconst { defineConfig }…

【Linux系统编程】—— 深度解析进程等待与终止:系统高效运行的关键

文章目录 进程创建再次认识fork()函数fork()函数返回值 写时拷贝fork常规⽤法以及调用失败的原因 进程终⽌进程终止对应的三种情况进程常⻅退出⽅法_exit函数exit函数return退出 进程等待进程等待的必要性进程等待的⽅法 进程创建 再次认识fork()函数 fork函数初识&#xff1…

最新版Edge浏览器加载ActiveX控件技术——allWebPlugin中间件之awp_CreateActiveXObject接口用法

背景 ActiveXObject‌是JavaScript中的一个特殊对象&#xff0c;用于在Internet Explorer&#xff08;IE&#xff09;浏览器中创建和操作COM&#xff08;Component Object Model&#xff09;对象。COM是一种面向对象的软件组件技术&#xff0c;允许不同应用程序之间的互操作性。…

使用 Java 和 FreeMarker 实现自动生成供货清单,动态生成 Word 文档,简化文档处理流程。

在上一篇博客中主要是使用SpringBootApache POI实现了BOM物料清单Excel表格导出&#xff0c;详见以下博客&#xff1a; Spring Boot Apache POI 实现 Exc&#xff08;&#xff09;el 导出&#xff1a;BOM物料清单生成器&#xff08;支持中文文件名、样式美化、数据合并&#…

JS基础(5):运算符和语句

一.运算符 1.赋值运算符 加减乘除都是一样的&#xff0c;&#xff0c;-&#xff0c;*&#xff0c;/ 2.一元运算符&#xff1a;经常用来计数 自增&#xff1a; 每次只能加一 自减&#xff1a;-- 前置自增 后置自增 结…

以租赁合同的例子讲清楚 开源协议原理和区别

开源协议通俗易懂的方式介绍清楚原理和区别 开源协议其实就是软件的“使用规则”&#xff0c;决定了别人可以如何使用、修改、分享你的代码。通俗一点说&#xff0c;如果你写了一段代码&#xff0c;开源协议就是告诉别人在什么条件下他们可以使用你的代码&#xff0c;以及他们可…

Flowable 管理各业务流程:流程设计器 (获取流程模型 XML)、流程部署、启动流程、流程审批、流程挂起和激活、任务分配

文章目录 引言I 表结构主要表前缀及其用途核心表II 流程设计器(Flowable BPMN模型编辑器插件)Flowable-UIvue插件III 流程部署部署步骤例子:根据流程模型ID部署IV 启动流程启动步骤ACT_RE_PROCDEF:流程定义相关信息例子:根据流程 ID 启动流程V 流程审批审批步骤Flowable 审…

【C++课程学习】:C++中的IO流(istream,iostream,fstream,sstream)

&#x1f381;个人主页&#xff1a;我们的五年 &#x1f50d;系列专栏&#xff1a;C课程学习 &#x1f389;欢迎大家点赞&#x1f44d;评论&#x1f4dd;收藏⭐文章 C学习笔记&#xff1a; https://blog.csdn.net/djdjiejsn/category_12682189.html 前言&#xff1a; 在C语…

四、华为交换机 STP

生成树协议&#xff08;STP&#xff09;的核心目的是在存在冗余链路的网络中&#xff0c;构建一个无环的拓扑结构&#xff0c;从而防止网络环路带来的广播风暴等问题 一、STP 原理 选举根桥&#xff1a;网络中的每台交换机都会有一个唯一的桥 ID&#xff08;BID&#xff09;&am…

数字图像处理:实验二

任务一&#xff1a; 将不同像素&#xff08;32、64和256&#xff09;的原图像放大为像素大 小为1024*1024的图像&#xff08;图像自选&#xff09; 要求&#xff1a;1&#xff09;输出一幅图&#xff0c;该图包含六幅子图&#xff0c;第一排是原图&#xff0c;第 二排是对应放大…

综述:大语言模型在机器人导航中的最新进展!

简介 机器人导航是指机器人能够在环境中自主移动和定位的能力。本文系统地回顾了基于大语言模型&#xff08;LLMs&#xff09;的机器人导航研究&#xff0c;将其分为感知、规划、控制、交互和协调等方面。具体来说&#xff0c;机器人导航通常被视为一个几何映射和规划问题&…