JS计算两个节点间的最短路径

已经有step1和step2两个节点,每个节点有4个可连接点,如何让step1或step2移动过程中,它们之间的路径始终最短,也就是如何让结点间的连线按照一定的规则动态变化,保证两个节点间的线段距离最短。

这里可以假设step2是圆心,step1到step2的距离为半径,step1绕step2做圆周运动,step1和可移动角度正好是360度,就可以根据角度变化来确定两个点之间的线段使用哪两个连接点来连接。

如上图,把360度等分成4部分,当step1旋转至各自区域时,线段就连接step1的可连接点。同理,用相同的方式,把step1看作是圆心,step1也可以根据角度得到最短路径的可连接点。

两个点旋转的角度可以根据三角函数来计算,其中step1的坐标是x1,y1,step2的坐标是x2,y2:

ini 复制代码
const radians = Math.atan2(y2 - y1, x2 - x1);
const deg = (radians * 180 / Math.PI + 360) % 360;

获取旋转的角度就可以开始获取可连接点:

lua 复制代码
if (deg > 315 || deg < 45) {
  // 设置可连接点
} else if (deg > 45 && deg < 135) {
  //
} else if (deg > 135 && deg < 225) {
  // 
} else if (deg > 225 && deg < 315) {
  // 
}

最终实现的效果:

预览地址

相关推荐
LCG元39 分钟前
STM32实战:基于STM32F103的智慧教室环境监控系统(CO₂+光照+人数统计)
前端·stm32·嵌入式硬件
yqcoder1 小时前
Vue 的心脏:深度解析 Vue 2 vs Vue 3 响应式机制
前端·javascript·vue.js
东方小月1 小时前
Claude Code Skill 完全指南:一个 markdown 文件,就是一个专家分身
前端·后端
DianSan_ERP1 小时前
抖店订单接口中消费者信息加密解密机制与安全履约全解析
前端·网络·数据库·后端·安全·团队开发·运维开发
PBitW1 小时前
一个skill,让项目管理和写绩效变得简单!
前端·trae
Dxy12393102162 小时前
CSS中的filter属性详解
前端·css
Vincent_czr2 小时前
iOS中常常遇到后端返回JSON出现null值问题
前端
问心无愧05132 小时前
ctf show web入门90
前端·笔记
yingyima2 小时前
午夜惊魂:用 Shell 脚本和 Hey Cron 解决服务器定时报警
前端
青山Coding2 小时前
Cesium应用(五):通视分析,解锁三维场景的”无遮挡“视野
前端·cesium