wsfe / flowchart

Vue 流程图组件 (本项目不在维护状态,请勿在生产环境使用。如果有相关组件需求,欢迎开 issue 讨论,感谢支持。)
MIT License
28 stars 11 forks source link

对于这个项目不理解的地方 #9

Open singleclown opened 3 years ago

singleclown commented 3 years ago

1.博客中提到线与节点重叠的点,即是不可走的点,这句话不太明白。 2.博客中提到的中垂直线,一个矩形不是有两根么,怎么取舍的,不太明白 3.这个项目有react版本么,不太看的明白,我目前需要在项目里使用你的这个路径逻辑,谢谢

ChuChencheng commented 3 years ago

1.博客中提到线与节点重叠的点,即是不可走的点,这句话不太明白。

image

假设红色点是当前遍历到的点,绿色两个点 1、2 是下一步可能加入 Open list 的点

先把当前点与 1、2 分别用线连起来。

可以看到跟点 1 的连线穿过了节点(实线矩形),与节点重叠了,所以点 1 不能加入 Open list

而点 2 没有与节点重叠,可以加入 Open list 。

2.博客中提到的中垂直线,一个矩形不是有两根么,怎么取舍的,不太明白

image

起点、终点做十字延长线组成虚线矩形

对于虚线矩形,取垂直于起点、终点所在节点边的两条边(也就是左右两条边)

这两条边的中点(绿色的两个点)也是可能的拐点

3.这个项目有react版本么,不太看的明白,我目前需要在项目里使用你的这个路径逻辑,谢谢

这个项目已经没有维护了,也没有 react 版本

这个项目的代码写得挺烂的,算法部分也有点问题,只有折线这部分思路可以参考一下

博客中的也有些遗漏,拐点可能出现的地方不止文中说的 16 个

singleclown commented 3 years ago

谢谢您的指导。1.确实,节点b在不同的方位角时,拐点个数是不只16个的。2.线与节点重叠的点,即是不可走的点,是不是我可以理解为该线段的与矩形的交点个数必须小于2。3.那我想问问有木有后期迭代的版本呢4.我看了项目中的代码,有点分不清生成路径的算法步骤,和文章中提到的算法逻辑有点不一样,目前我想从该项目中获取路径生成的算法逻辑,楼主能否帮忙讲讲项目中代码生成的逻辑步骤。

ChuChencheng commented 3 years ago

抱歉,最近比较忙,一直没回复

线与节点重叠的点,即是不可走的点,是不是我可以理解为该线段的与矩形的交点个数必须小于2。

是这样,跟起点、终点连线的线段与矩形有一个交点,其他线段与矩形没有交点

那我想问问有木有后期迭代的版本呢

这是在前司开发的东西,本来就只有我一个人在搞,有点力不从心,短期内没有迭代的计划,抱歉

楼主能否帮忙讲讲项目中代码生成的逻辑步骤。

路径生成的核心就是在 A* 的基础上做一些调整

https://github.com/wsfe/flowchart/blob/master/src/utils/a-star/index.ts#L38

主要是这个函数,传入起点跟终点的坐标,返回起点到终点路径所有拐点组成的数组,找不到路径就返回 null

做的调整有:

  1. 最小堆的排序,对于 f 相同的情况做一些处理(代码里这边有点问题,有时候会多一个拐点,需要改进)
  2. getWalkableNodes 会将待加入 open list 的点过滤一遍,这边就是判断线段与矩形有多少交点的地方

你也可以参考一些比较有名的库,比如 G6 之类的,代码会比这个项目好很多😃