一个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;
}

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

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

相关文章

090基于web+springboot的中小企业设备管理系统

欢迎大家关注&#xff0c;一起好好学习&#xff0c;天天向上 文章目录 一项目简介技术介绍 二、功能组成三、效果图四、 文章目录 一项目简介 本中小企业设备管理系统管理员有个人中心&#xff0c;用户管理&#xff0c;员工管理&#xff0c;设备信息管理&#xff0c;配件信息管…

c++类和对象(八) static成员 友元

1.1 概念 声明为static的类成员称为类的静态成员&#xff0c;用static修饰的成员变量&#xff0c;称之为静态成员变量&#xff1b;用static修饰的成员函数&#xff0c;称之为静态成员函数。静态成员变量一定要在类外进行初始化。 面试题&#xff1a;实现一个类&#xff0c;计算…

【深度学习】pytorch——快速入门

笔记为自我总结整理的学习笔记&#xff0c;若有错误欢迎指出哟~ pytorch快速入门 简介张量&#xff08;Tensor&#xff09;操作创建张量向量拷贝张量维度张量加法函数名后面带下划线 _ 的函数索引和切片Tensor和Numpy的数组之间的转换张量&#xff08;tensor&#xff09;与标量…

2.10 CSS BFC

1.简介 BFC是Block Formatting Context(块级格式上下文)&#xff0c;可以理解成元素的一个“特异功能”。该“特异功能”&#xff0c;在默认的情况下处于关闭状态;当元素满足了某些条件后&#xff0c;该"特异功能被激活。所谓激活"特异功能”&#xff0c;专业点说就…

【KVM】软件虚拟化和硬件虚拟化类型

前言 大家好&#xff0c;我是秋意零。 今天介绍的内容是虚拟化技术以及软件虚拟化和硬件虚拟化。 &#x1f47f; 简介 &#x1f3e0; 个人主页&#xff1a; 秋意零&#x1f525; 账号&#xff1a;全平台同名&#xff0c; 秋意零 账号创作者、 云社区 创建者&#x1f9d1; 个…

Leetcode—187.重复的DNA序列【中等】

2023每日刷题&#xff08;二十&#xff09; Leetcode—187.重复的DNA序列 实现代码 class Solution { public:const int L 10;vector<string> findRepeatedDnaSequences(string s) {unordered_map<string, int> str;vector<string> ans;int len s.size()…

【市场分析】Temu数据采集销售额商品量占比分析数据分析接口Api

引言 temu电商平台是一个充满活力的电商平台&#xff0c;拥有多种商品类别和数万家店铺。在这个项目中我的任务是采集平台上的大量公开数据信息。通过数据采集&#xff0c;我旨在深入了解temu电商平台的产品分布、销售趋势和文本描述&#xff0c;以揭示有趣的见解。 数据采集…

PyQuery库写一个有趣的爬虫程序

PyQuery库是一个基于jQuery语法的Python库&#xff0c;它可以方便地对HTML/XML文档进行解析和操作。使用PyQuery库可以快速地获取网页中的数据&#xff0c;进行数据清洗和分析。PyQuery库的基本用法包括字符串初始化、打开网页、css属性、标签内容等获取、DOM基本操作等相关技巧…

Scala 泛型编程

1. 泛型 Scala 支持类型参数化&#xff0c;使得我们能够编写泛型程序。 1.1 泛型类 Java 中使用 <> 符号来包含定义的类型参数&#xff0c;Scala 则使用 []。 class Pair[T, S](val first: T, val second: S) {override def toString: String first ":" sec…

设置DevC++支持c++11标准

1.点击编译选项 2. 设置语言标准 3.点击确认 4.测试代码 使用auto成功 测试&#xff01;

【Linux】:Linux项目自动化构建工具——make/Makefile || Linux第一个小程序——进度条(简单版本)

在本章开始给大家分享一个图片 希望对你有帮助 在这里插入图片描述 &#x1f3c6;前言 在开始本章之前 我们需要回顾一下上节课的函数的动静态库的优缺点 动态库的优点&#xff1a; 比较节省资源&#xff08;这里说的资源不仅仅是磁盘资源 也包括网络资源 内存资源等等&#…

【SpringCloud Alibaba -- Nacos】Linux 搭建 Nacos 集群

搭建 Nacos 集群 架构 centos安装docker https://docs.docker.com/engine/install/centos/ 详细配置过程 MySql8 mysql数据库配置 数据库脚本 nacos/conf/nacos-mysql.sql Nacos2 application.properties 修改为mysql spring.datasource.platformmysqldb.num1 db.url…

0007Java安卓程序设计-ssm基于Android的校园新闻管理系统

文章目录 **摘** **要**目 录开发环境 编程技术交流、源码分享、模板分享、网课教程 &#x1f427;裙&#xff1a;776871563 摘 要 网络的广泛应用给生活带来了十分的便利。所以把校园新闻管理与现在网络相结合&#xff0c;利用java技术建设校园新闻管理系统app&#xff0c;实…

数据结构与算法(Java版) | 排序算法的介绍与分类

各位朋友&#xff0c;现在我们即将要进入数据结构与算法&#xff08;Java版&#xff09;这一系列教程中的排序算法这一章节内容的学习中了&#xff0c;所以还请大家系好安全带&#xff0c;跟随我准备出发吧&#xff01; 相信诸位应该都知道排序算法有很多种吧&#xff01;就算没…

包装印刷行业万界星空科技云MES解决方案

印刷业的机械化程度在国内制造行业内算是比较高的&#xff0c;不算是劳动密集型企业。如书本的装订、包装的模切、烫金、糊盒等都已经有了全自动设备。印刷厂除了部分手工必须采用人工外&#xff0c;大部分都可以采用机器&#xff0c;也就意味着可以由少量工人生产出大量产品。…

核电堆芯组件动态特性试验研究

u 核电试验概述 反应堆是核电事业的核心组成部分之一&#xff0c;堆内构件、堆芯燃料组件等部件在冷却剂流动冲击下&#xff0c;会诱发剧烈振动&#xff0c;导致堆芯内试验件流道不稳定。为了保障反应堆的安全运行&#xff0c;根据国家核安全法规规定&#xff0c;有必要对受冷…

linux 查看当前目录下每个文件夹大小

要在 Linux 中查看当前目录下每个文件夹的大小&#xff0c;可以使用 du 命令&#xff08;磁盘使用情况&#xff09;结合其他一些选项。下面是几个常用的命令示例&#xff1a; 显示当前目录下每个文件夹的大小——只显示一层文件夹&#xff1a; du -h --max-depth1该命令会以人…

storm安装手册及笔记

图解Storm相关概念 图解storm的并发机制 安装Storm的步骤 1、安装一个zookeeper集群 2、上传storm的安装包&#xff0c;解压 3、修改配置文件storm.yaml #所使用的zookeeper集群主机 storm.zookeeper.servers: - "weekend05" - "weekend06"…

高性能网络编程 - 关于单台服务器并发TCP连接数理论值的讨论

文章目录 概述操作系统的限制因素文件句柄限制1. 进程限制2. 全局限制 端口号范围限制 概述 单台服务器可以支持的并发TCP连接数取决于多个因素&#xff0c;包括硬件性能、操作系统限制、网络带宽和应用程序设计。以下是一些影响并发TCP连接数的因素&#xff1a; 服务器硬件性…

力扣 141.环形链表和142.环形链表2

目录 1.环形链表Ⅰ解题思路2.环形链表Ⅰ代码实现3.环形链表Ⅱ解题思路4.环形链表Ⅱ代码实现 1.环形链表Ⅰ解题思路 利用快慢指针&#xff0c;快指针一次走两个&#xff0c;慢指针一次走一个&#xff0c;如果出现了快指针为空或者快指针的next为空的现象则说明不带环&#xff0…