流程图连接线生成算法
一、连接线种类
使用Visio等软件时,图形和图形之间可能需要使用连接线,如下图所示:
一般连接线会有3种,分别是折线、直线和Bezier曲线。上图中的蓝线是Bezier曲线,绿线是直线,黑线是折线。直线过于简单,无需算法讨论,而Bezier曲线将在后续的文章中讨论。本文主要讨论折线的生成算法。
二、折线形态
根据图形的相对位置和箭头的方向,折线会有不同的形态。就分段数来说,会出现2、3、4、5段的情况,如下图所示(事实上还有1段的情况,由于简单,本文不讨论):
对一个图形来说,其他图形相对于它的位置,总共有4种,分别是左上、左下、右上和右下:
而起始箭头的方向有4种,终止箭头的方向有4种,所以连接线一共有64种形态。在算法编写的时候,把64种情况用if语句写出来,也未尝不是一个办法。但本文当然不会用这种方法。
三、形态简化
如果不考虑箭头的方向,而只是考虑两个点的连接线,那么情况就简单很多了,不外乎2种:
对于箭头的方向,我们可以把它看成是起点终点往外延伸一小段距离。我们把延伸之后的那个点,称为内联点。
这样一来,起点和终点的连接线,就转化为内联点的连接线了。而内联点的连接线,只有2种情况!
那么,这2种情况应该怎么选择呢?条件有两个:
选择连接线没有经过起点和终点的。
如果条件1满足,选择弯折次数少的。在上图中,两种情况都没有经过起点和终点,都满足条件1。那么,我们应该选择第一种情况,因为它只折了一次。
事实上,条件1有可能两种情况都不能满足(当分段数为5时)。如下图所示:
对于这种情况,我们需要在两个箭头中间插入一条线,直接用内联点连接这条线的两个端点即可。
四、伪代码
经过第三部分的分析,我们可以书写连接线生成算法的伪代码了。
根据箭头发向,创建内联点。
创建内联点的两种连接方式。
判断是否经过起点终点,如果只有一种方式满足,输出这种方式;如果都满足,转到4;如果都不满足,转到5。
判断哪种方式弯折次数少,输出这种方式。
添加一条平行于箭头的线,连接内联点和线的两端。输出这种连接方式。
流程图连接线生成算法相关推荐
- c#随机数生成编号_忘掉 Snowflake,感受一下性能高出587倍的全局唯一ID生成算法...
今天我们来拆解 Snowflake 算法,同时领略百度.美团.腾讯等大厂在全局唯一 ID 服务方面做的设计,接着根据具体需求设计一款全新的全局唯一 ID 生成算法.这还不够,我们会讨论到全局唯一 ID ...
- 微信用户全局唯一标识_忘掉 Snowflake,感受一下性能高出587倍的全局唯一ID生成算法...
今天我们来拆解 Snowflake 算法,同时领略百度.美团.腾讯等大厂在全局唯一 ID 服务方面做的设计,接着根据具体需求设计一款全新的全局唯一 ID 生成算法.这还不够,我们会讨论到全局唯一 ID ...
- line划线计算机图像学,【计算机图形学】根本图形元素:直线的生成算法
[计算机图形学]基本图形元素:直线的生成算法 08年9月入学,12年7月毕业,结束了我在软件学院愉快丰富的大学生活.此系列是对四年专业课程学习的回顾,索引参见:http://blog.csdn.net ...
- 从一维cutting问题看列生成算法
从一维cutting问题看列生成算法 列生成算法 一维cutting问题 列生成原理 集合覆盖模型 列生成步骤说明 python 代码实现 列生成算法 列生成在求解大型线性规划时往往都表现良好,在很多 ...
- cutting stock 问题的列生成算法
本文以 cutting stock 问题为例,介绍列生成算法的数学模型. 1. 问题描述 长板长度:10m 子板需求:2m: 100; 3m: 50; 5m: 20 - 优化目标:最小化,长板切割总数 ...
- snowflake做主键 自增_忘掉 Snowflake,感受一下性能高出 587 倍的全局唯一 ID 生成算法...
今天我们来拆解 Snowflake 算法,同时领略百度.美团.腾讯等大厂在全局唯一 ID 服务方面做的设计,接着根据具体需求设计一款全新的全局唯一 ID 生成算法.这还不够,我们会讨论到全局唯一 ID ...
- mysql序列号生成_忘掉 Snowflake,感受一下性能高出587倍的全局唯一ID生成算法
今天我们来拆解 Snowflake 算法,同时领略百度.美团.腾讯等大厂在全局唯一 ID 服务方面做的设计,接着根据具体需求设计一款全新的全局唯一 ID 生成算法.这还不够,我们会讨论到全局唯一 ID ...
- 忘掉 Snowflake,感受一下性能高出587倍的全局唯一ID生成算法
今天我们来拆解 Snowflake 算法,同时领略百度.美团.腾讯等大厂在全局唯一 ID 服务方面做的设计,接着根据具体需求设计一款全新的全局唯一 ID 生成算法.这还不够,我们会讨论到全局唯一 ID ...
- 基于材料生成算法的工程优化
文章目录 一.理论基础 1.材料生成算法 (1)模拟化合物 (2)模拟化学反应 (3)模拟化学稳定性 2.MGA算法流程图 二.仿真实验与分析 三.参考文献 一.理论基础 1.材料生成算法 材料生成算 ...
- matlab仿真参考文献,生成算法论文,关于AOS自相似业务流等时帧生成算法的Matlab仿真相关参考文献资料-免费论文范文...
导读:该文是关于生成算法论文范文,为你的论文写作提供相关论文资料参考. (沈阳理工大学信息科学与工程学院,辽宁 沈阳 110159) [摘 要]鉴于网络呈现自相似特性而传统的泊松模型已不再适用于AOS ...
最新文章
- 11 个高效的同行代码评审最佳实践
- 系统调用回答为什么要用buffer写
- ファイルアップロード関連のjQueryプラグイン10攻略
- [ASP.NET Core 2.0 前方速报].NET Core 2.0.3 已经支持引用第三方程序集了
- .写一个方法 void printScore(int score),输出相应的等级。score代表分数,等级格式如下:
- Linux(CentOS)安装apache(httpd),其他电脑无法访问的原因 【iptables打开某端口】
- 1982:【19CSPJ普及组】数字游戏 方法二
- linux的initrd.img的解压和打包
- 高品质空间合成海报,让夜色更迷人
- (四)Qt实现自定义模型基于QAbstractTableModel
- VC++常见错误原因解析之error LNK2019: 无法解析的外部符号 public: void __thiscall
- [转]SecureCRT使用配置详细图文教程
- mt4双线macd_指标小课堂|学院首创!独家手机MT4双线MACD指标设置教程
- 爬虫日记(7):用urllib和beautifulsoup来实战抓取新闻
- Socket发送缓冲区接收缓冲区快问快答
- 章文嵩坐镇淘宝双11流量作战室
- 使用fir im进行内测托管
- Spring MVC之redirect、forward和普通跳转
- 黑盒测试技术之等价类划分法
- 第三方微信+支付宝个人免签支付源码