当前位置: 首页 > news >正文

一个JS版寻路的实现

js版的寻路的测试

20231104_161146

path
get_v8: function (x_inc, y_inc) {if (x_inc == 0) {if (y_inc < 0) {return [[0, -1], [-1, -1], [1, -1], [-1, 0], [1, 0], [-1, 1], [1, 1], [0, 1]];} else if (y_inc > 0) {return [[0, 1], [-1, 1], [1, 1], [-1, 0], [1, 0], [-1, -1], [1, -1], [0, -1]];}}if (y_inc == 0) {if (x_inc < 0) {return [[-1, 0], [-1, -1], [-1, 1], [0, -1], [0, 1], [1, -1], [1, 1], [1, 0]];} else if (x_inc > 0) {return [[1, 0], [1, -1], [1, 1], [0, -1], [0, 1], [-1, -1], [-1, 1], [-1, 0]];}}if ((x_inc == 1) && (y_inc == 1)) {return [[1, 1], [1, 0], [0, 1], [1, -1], [-1, 1], [0, -1], [-1, 0], [-1, -1]];}if ((x_inc == -1) && (y_inc == -1)) {return [[-1, -1], [-1, 0], [0, -1], [-1, 1], [1, -1], [0, 1], [1, 0], [1, 1]];}if ((x_inc == 1) && (y_inc == -1)) {return [[1, -1], [0, -1], [1, 0], [-1, -1], [1, 1], [-1, 0], [0, 1], [-1, 1]];}if ((x_inc == -1) && (y_inc == 1)) {return [[-1, 1], [0, 1], [-1, 0], [1, 1], [-1, -1], [1, 0], [0, -1], [1, -1]];}
},
is_line_path: function (path, i1, i2, map_data) {if (path[i1].col == path[i2].col) {for (var i = i1; i <= i2; i++) {if (map_data.data[path[i].row][path[i1].col] < 1)return false;}return true;}if (path[i1].row == path[i2].row) {for (var i = i1; i <= i2; i++) {if (map_data.data[path[i1].row][path[i].col] < 1)return false;}return true;}return false;
},
smooth_path: function (path, map_data) {for (var k = path.length - 1; k > 0; k--) {var x2 = path[k].col;var y2 = path[k].row;var i_line = -1;for (var i = k - 1; i >= 0; i--) {if ((path[i].col == x2) || (path[i].row == y2)) {if (this.is_line_path(path, i, k, map_data)) {i_line = i;}}}if (i_line >= 0) {if (path[i_line].col == x2) {for (var i = i_line; i <= k; i++) {path[i].col = x2;}}if (path[i_line].row == y2) {for (var i = i_line; i <= k; i++) {path[i].row = y2;}}}}return path;
},
get_path: function (pos1, pos2, map_data) {var pos_from = pos1;var pos_to = this.get_pos_canto(pos2, map_data);var rows = map_data.rows;var cols = map_data.cols;if (map_data.pt) {} else {map_data.pt = [];for (var row = 0; row < rows; row++) {var p = [];for (var col = 0; col < cols; col++) {p.push([0, 0]);}map_data.pt.push(p);}}for (var row = 0; row < rows; row++) {for (var col = 0; col < cols; col++) {if (map_data.data[row][col] >= 1) {map_data.data[row][col] = 1;}}}var v8 = [[-1, -1], [-1, 0], [-1, 1], [0, 1], [1, 1], [1, 0], [1, -1], [0, -1]];var v = v8;var pt = [];var x_p;var y_p;var x;var y;var x_inc;var y_inc;var xy;var is_end = false;var pt_tmp = [];pt.push(pos_from);var path = [];map_data.data[pos_from.row][pos_from.col] = 2;map_data.pt[pos_from.row][pos_from.col] = [0, 0];var maxd = Math.sqrt(map_data.cols * map_data.cols + map_data.rows * map_data.rows);for (var d = 3; d < maxd * 8; d++) {pt_tmp = [];for (var i = 0; i < pt.length; i++) {var x_p = pt[i].col;var y_p = pt[i].row;if (x_p <= 0)continue;if (x_p >= cols)continue;if (y_p <= 0)continue;if (y_p >= rows)continue;if (d > 3) {xy = map_data.pt[y_p][x_p];x_inc = x_p - xy[0];y_inc = y_p - xy[1];v = this.get_v8(x_inc, y_inc);}for (k = 0; k < v.length; k++) {x = x_p + v[k][0];y = y_p + v[k][1];if ((map_data.data[y][x] == 1)) {if (map_data.data[y][x] == 1) {pt_tmp.push({ col: x, row: y });}map_data.data[y][x] = d;map_data.pt[y][x][0] = x_pmap_data.pt[y][x][1] = y_p;if ((x == pos_to.col) && (y == pos_to.row)) {var tmp = [];for (var m = 0; m < d; m++) {xy = map_data.pt[y][x];x = xy[0];y = xy[1];if ((x > 0) && (y > 0)) {tmp.push({ col: x, row: y });}else {break;}}path.push(pos_from);for (var m = tmp.length - 1; m >= 0; m--) {path.push(tmp[m]);}path.push(pos_to);is_end = true;break;}}}if (is_end) {break;}}if (is_end) {break;}pt = pt_tmp;}return this.smooth_path(path, map_data);
},
get_pos_canto: function (pos, map_data) {if (map_data.data[pos.row][pos.col] >= 1) {return pos;}var x1 = 0;var x2 = 0;var y1 = 0;var y2 = 0;var maxd = Math.sqrt(map_data.cols * map_data.cols + map_data.rows * map_data.rows);for (var d = 1; d < maxd; d++) {x1 = pos.col - d;x2 = pos.col + d;y1 = pos.row - d;y2 = pos.row + d;if (x1 < 0) x1 = 0;if (x2 >= map_data.cols) x2 = map_data.cols - 1;if (y1 < 0) y1 = 0;if (y2 >= map_data.rows) y2 = map_data.rows - 1;for (var x = x1; x <= x2; x++) {if (map_data.data[y1][x] >= 1)return { col: x, row: y1 }if (map_data.data[y2][x] >= 1)return { col: x, row: y2 }}for (var y = y1; y <= y2; y++) {if (map_data.data[y][x1] >= 1)return { col: x1, row: y }if (map_data.data[y][x2] >= 1)return { col: x2, row: y }}} return null;
}

相关文章:

一个JS版寻路的实现

js版的寻路的测试 20231104_161146 path get_v8: function (x_inc, y_inc) {if (x_inc 0) {if (y_inc < 0) {return [[0, -1], [-1, -1], [1, -1], [-1, 0], [1, 0], [-1, 1], [1, 1], [0, 1]];} else if (y_inc > 0) {return [[0, 1], [-1, 1], [1, 1], [-1, 0], [1, 0…...

Java web应用的目录结构

详情可以参考&#xff1a; https://tomcat.apache.org/tomcat-10.1-doc/appdev/deployment.html https://jakarta.ee/specifications/servlet/6.0/jakarta-servlet-spec-6.0.html#directory-structure Java web应用根目录下包含如下内容&#xff1a; *.html, *.jsp等&#xf…...

【Mac环境搭建】JDK安装、多JDK安装与切换

文章目录 JDK下载与安装下载安装 配置环境变量安装多个JDK共存 JDK下载与安装 下载 Oracle官网提供了非常多个版本的JDK供下载&#xff0c;可以点击如下链接重定向到JDK下载页面 ORACLE官网JDK下载 安装 下面的官方文档可以点开收藏到浏览器的收藏夹&#xff0c;这样后续在开…...

C++: 类和对象(中)

文章目录 1. 类的6个默认成员函数2. 构造函数构造函数概念构造函数特性特性1,2,3,4特性5特性6特性7 3. 析构函数析构函数概念析构函数特性特性1,2,3,4特性5特性6 4. 拷贝构造函数拷贝构造函数概念拷贝构造函数特性特性1,2特性3特性4特性5 5. 运算符重载一般运算符重载赋值运算符…...

图片批量归类:告别混乱,实现高效文件管理

在日常生活中&#xff0c;我们经常需要处理大量的图片文件。这些图片可能来自于不同的设备、不同的目录&#xff0c;甚至不同的存储介质。随着时间的推移&#xff0c;这些图片文件会越来越多&#xff0c;管理起来也会越来越困难。如何高效地整理这些图片文件&#xff0c;告别混…...

187. 重复的DNA序列 --力扣 --JAVA

题目 DNA序列 由一系列核苷酸组成&#xff0c;缩写为 A, C, G 和 T.。 例如&#xff0c;"ACGAATTCCG" 是一个 DNA序列 。 在研究 DNA 时&#xff0c;识别 DNA 中的重复序列非常有用。 给定一个表示 DNA序列 的字符串 s &#xff0c;返回所有在 DNA 分子中出现不止一次…...

Mysql高级——Mysql8一主一从,多主多从搭建

修改 /etc/hosts文件 ip地址 master1 ip地址 master2 ip地址 slave1 ip地址 slave2一主一从 create database master1db;create table master1db.master1tab(name char(50));insert into master1db.master1tab VALUES(1111);insert into master1db.master1tab VALUES(2222);m…...

【Qt5】QNetworkAccessManager

2023年11月5&#xff0c;周日晚上 QNetworkAccessManager是Qt Network模块中的一个类&#xff0c;用于发送网络请求和接收网络响应。它提供了一种方便的方式来进行网络通信&#xff0c;支持常见的网络协议&#xff0c;如HTTP、HTTPS、FTP等。 QNetworkAccessManager和QNetwork…...

zookeeper节点类型

节点类型 持久节点&#xff08;Persistent Nodes&#xff09; 这些是Zookeeper中最常见的一种节点类型&#xff0c;当创建一个持久类型节点时&#xff0c;该值会一直存在zookeeper中&#xff0c;直到被显式删除或被新值覆盖。 临时节点&#xff08;Ephemeral Nodes&#xff…...

【C++】一篇文章搞懂auto关键字及其相关用法!

&#x1f490; &#x1f338; &#x1f337; &#x1f340; &#x1f339; &#x1f33b; &#x1f33a; &#x1f341; &#x1f343; &#x1f342; &#x1f33f; &#x1f344;&#x1f35d; &#x1f35b; &#x1f364; &#x1f4c3;个人主页 &#xff1a;阿然成长日记 …...

微信小程序overflow-x超出部分样式不渲染

把display:flex改成display:inline-flex&#xff0c; 将对象作为内联块级弹性伸缩盒显示&#xff0c; 类似与是子元素将父元素撑开&#xff0c;样式就显示出来了...

Oracle常用运维SQL-SQL执行性能及锁表等查询分析

oracle相关系列文章: docker–在Anaconda jupyter 容器中使用oracle数据源时,Oracle客户端安装配置及使用示例 Oracle常用运维SQL–用户管理、数据导入、导出的实用脚本 Oracle TEMPORARY TABLE 临时表的使用及删除报ORA-14452错误的解决办法 Oracle常用运维SQL-SQL执行性能及…...

安装MySQL时出现 由于找不到 MSVCR120.dll,无法继续执行代码。重新安装程序可能会解决此问题。

--------------------------- mysqld.exe - 系统错误 --------------------------- 由于找不到 MSVCR120.dll&#xff0c;无法继续执行代码。重新安装程序可能会解决此问题。 --------------------------- 确定 --------------------------- 安装MySQL时出现 “This appl…...

【基础IO⑧】:文件描述符fd(进程与文件的联系)

【基础IO⑧】&#xff1a;进程与文件之间的联系(文件描述符fd&#xff09; 一.前言探讨[进程与文件关系]二.C语言文件操作三.系统文件调用1.open/write 四.文件描述符fd 一.前言探讨[进程与文件关系] 我们首先了解一些基本的认识&#xff1a; 1.文件包括文件内容和文件属性 2.…...

搭建WAMP网站教程(windows+apache+mysql+php)

之前为了学习网络安全&#xff0c;从搭建网站学起&#xff0c;对网站运行有个初步的了解。 今天翻到了之前的笔记&#xff0c;顺手发到csdn上了。 搭建网站步骤 一、Apache 安装Apache&#xff0c;下载Apache之后把Apache解压&#xff0c;此处解压到C:\目录下 2.然后要记得安…...

瓦斯抽采VR应急救援模拟仿真系统筑牢企业安全生产防线

矿工素质对安全生产的影响很大。传统的煤矿安全事故培训出于条件差、经验少加上侥幸心理&#xff0c;导致其在教学内容时过于简单且不切合实际&#xff0c;无法真正发挥培训作用。瓦斯检查作业VR模拟实操培训通过真实还原煤矿作业环境&#xff0c;让受训者身临其境地进入三维仿…...

nodelist 与 HTMLCollection 的区别

原地址 https://cloud.tencent.com/developer/article/2013289 节点与元素 根据 W3C 的 HTML DOM 标准&#xff0c;HTML 文档中的所有内容都是节点&#xff1a; 整个文档是一个文档节点每个 HTML 元素是元素节点HTML 元素内的文本是文本节点每个 HTML 属性是属性节点注释是注…...

系列十二、过滤器 vs 拦截器

一、过滤器 vs 拦截器 1.1、区别 &#xff08;1&#xff09;触发时机不一样&#xff0c;过滤器是在请求进入容器后Servlet之前进行预处理的&#xff0c;请求结束返回也是&#xff0c;是在Servlet处理完后&#xff0c;返回给前端之前&#xff1b; &#xff08;2&#xff09;过滤…...

dockerfile运行apk命令卡住的问题解决——更换镜像

在练习docker官方文档关于docker compose初体验&#xff08;https://docs.docker.com/compose/gettingstarted/&#xff09;过程中&#xff0c;执行dockerfile命令RUN apk add --no-cache gcc musl-dev linux-headers时&#xff0c;出现卡住的情况&#xff0c;等了几千秒都不行…...

Android - 编译 openssl 踩坑之路

一、简述 如果你想快速在项目中使用上 openssl,可以使用网上其他开发者提供好的预编译库: OpenSSL(All):https://builds.viaduck.org/prebuilts/openssl/OpenSSL(3.1.*) :https://github.com/217heidai/openssl_for_android以上的预编译库可能最低只支持 API 21(即 Andro…...

浏览器访问 AWS ECS 上部署的 Docker 容器(监听 80 端口)

✅ 一、ECS 服务配置 Dockerfile 确保监听 80 端口 EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]或 EXPOSE 80 CMD ["python3", "-m", "http.server", "80"]任务定义&#xff08;Task Definition&…...

MPNet:旋转机械轻量化故障诊断模型详解python代码复现

目录 一、问题背景与挑战 二、MPNet核心架构 2.1 多分支特征融合模块(MBFM) 2.2 残差注意力金字塔模块(RAPM) 2.2.1 空间金字塔注意力(SPA) 2.2.2 金字塔残差块(PRBlock) 2.3 分类器设计 三、关键技术突破 3.1 多尺度特征融合 3.2 轻量化设计策略 3.3 抗噪声…...

全球首个30米分辨率湿地数据集(2000—2022)

数据简介 今天我们分享的数据是全球30米分辨率湿地数据集&#xff0c;包含8种湿地亚类&#xff0c;该数据以0.5X0.5的瓦片存储&#xff0c;我们整理了所有属于中国的瓦片名称与其对应省份&#xff0c;方便大家研究使用。 该数据集作为全球首个30米分辨率、覆盖2000–2022年时间…...

在四层代理中还原真实客户端ngx_stream_realip_module

一、模块原理与价值 PROXY Protocol 回溯 第三方负载均衡&#xff08;如 HAProxy、AWS NLB、阿里 SLB&#xff09;发起上游连接时&#xff0c;将真实客户端 IP/Port 写入 PROXY Protocol v1/v2 头。Stream 层接收到头部后&#xff0c;ngx_stream_realip_module 从中提取原始信息…...

spring:实例工厂方法获取bean

spring处理使用静态工厂方法获取bean实例&#xff0c;也可以通过实例工厂方法获取bean实例。 实例工厂方法步骤如下&#xff1a; 定义实例工厂类&#xff08;Java代码&#xff09;&#xff0c;定义实例工厂&#xff08;xml&#xff09;&#xff0c;定义调用实例工厂&#xff…...

拉力测试cuda pytorch 把 4070显卡拉满

import torch import timedef stress_test_gpu(matrix_size16384, duration300):"""对GPU进行压力测试&#xff0c;通过持续的矩阵乘法来最大化GPU利用率参数:matrix_size: 矩阵维度大小&#xff0c;增大可提高计算复杂度duration: 测试持续时间&#xff08;秒&…...

智能仓储的未来:自动化、AI与数据分析如何重塑物流中心

当仓库学会“思考”&#xff0c;物流的终极形态正在诞生 想象这样的场景&#xff1a; 凌晨3点&#xff0c;某物流中心灯火通明却空无一人。AGV机器人集群根据实时订单动态规划路径&#xff1b;AI视觉系统在0.1秒内扫描包裹信息&#xff1b;数字孪生平台正模拟次日峰值流量压力…...

Xen Server服务器释放磁盘空间

disk.sh #!/bin/bashcd /run/sr-mount/e54f0646-ae11-0457-b64f-eba4673b824c # 全部虚拟机物理磁盘文件存储 a$(ls -l | awk {print $NF} | cut -d. -f1) # 使用中的虚拟机物理磁盘文件 b$(xe vm-disk-list --multiple | grep uuid | awk {print $NF})printf "%s\n"…...

让回归模型不再被异常值“带跑偏“,MSE和Cauchy损失函数在噪声数据环境下的实战对比

在机器学习的回归分析中&#xff0c;损失函数的选择对模型性能具有决定性影响。均方误差&#xff08;MSE&#xff09;作为经典的损失函数&#xff0c;在处理干净数据时表现优异&#xff0c;但在面对包含异常值的噪声数据时&#xff0c;其对大误差的二次惩罚机制往往导致模型参数…...

Python基于历史模拟方法实现投资组合风险管理的VaR与ES模型项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档&#xff09;&#xff0c;如需数据代码文档可以直接到文章最后关注获取。 1.项目背景 在金融市场日益复杂和波动加剧的背景下&#xff0c;风险管理成为金融机构和个人投资者关注的核心议题之一。VaR&…...