一、连接线种类

使用Visio等软件时,图形和图形之间可能需要使用连接线,如下图所示:

一般连接线会有3种,分别是折线、直线和Bezier曲线。上图中的蓝线是Bezier曲线,绿线是直线,黑线是折线。直线过于简单,无需算法讨论,而Bezier曲线将在后续的文章中讨论。本文主要讨论折线的生成算法。

二、折线形态

根据图形的相对位置和箭头的方向,折线会有不同的形态。就分段数来说,会出现2、3、4、5段的情况,如下图所示(事实上还有1段的情况,由于简单,本文不讨论):

对一个图形来说,其他图形相对于它的位置,总共有4种,分别是左上、左下、右上和右下:

而起始箭头的方向有4种,终止箭头的方向有4种,所以连接线一共有64种形态。在算法编写的时候,把64种情况用if语句写出来,也未尝不是一个办法。但本文当然不会用这种方法。

三、形态简化

如果不考虑箭头的方向,而只是考虑两个点的连接线,那么情况就简单很多了,不外乎2种:

对于箭头的方向,我们可以把它看成是起点终点往外延伸一小段距离。我们把延伸之后的那个点,称为内联点。

这样一来,起点和终点的连接线,就转化为内联点的连接线了。而内联点的连接线,只有2种情况!

那么,这2种情况应该怎么选择呢?条件有两个:

  1. 选择连接线没有经过起点和终点的。

  2. 如果条件1满足,选择弯折次数少的。在上图中,两种情况都没有经过起点和终点,都满足条件1。那么,我们应该选择第一种情况,因为它只折了一次。

事实上,条件1有可能两种情况都不能满足(当分段数为5时)。如下图所示:

对于这种情况,我们需要在两个箭头中间插入一条线,直接用内联点连接这条线的两个端点即可。

四、伪代码

经过第三部分的分析,我们可以书写连接线生成算法的伪代码了。

  1. 根据箭头发向,创建内联点。

  2. 创建内联点的两种连接方式。

  3. 判断是否经过起点终点,如果只有一种方式满足,输出这种方式;如果都满足,转到4;如果都不满足,转到5。

  4. 判断哪种方式弯折次数少,输出这种方式。

  5. 添加一条平行于箭头的线,连接内联点和线的两端。输出这种连接方式。

流程图连接线生成算法相关推荐

  1. c#随机数生成编号_忘掉 Snowflake,感受一下性能高出587倍的全局唯一ID生成算法...

    今天我们来拆解 Snowflake 算法,同时领略百度.美团.腾讯等大厂在全局唯一 ID 服务方面做的设计,接着根据具体需求设计一款全新的全局唯一 ID 生成算法.这还不够,我们会讨论到全局唯一 ID ...

  2. 微信用户全局唯一标识_忘掉 Snowflake,感受一下性能高出587倍的全局唯一ID生成算法...

    今天我们来拆解 Snowflake 算法,同时领略百度.美团.腾讯等大厂在全局唯一 ID 服务方面做的设计,接着根据具体需求设计一款全新的全局唯一 ID 生成算法.这还不够,我们会讨论到全局唯一 ID ...

  3. line划线计算机图像学,【计算机图形学】根本图形元素:直线的生成算法

    [计算机图形学]基本图形元素:直线的生成算法 08年9月入学,12年7月毕业,结束了我在软件学院愉快丰富的大学生活.此系列是对四年专业课程学习的回顾,索引参见:http://blog.csdn.net ...

  4. 从一维cutting问题看列生成算法

    从一维cutting问题看列生成算法 列生成算法 一维cutting问题 列生成原理 集合覆盖模型 列生成步骤说明 python 代码实现 列生成算法 列生成在求解大型线性规划时往往都表现良好,在很多 ...

  5. cutting stock 问题的列生成算法

    本文以 cutting stock 问题为例,介绍列生成算法的数学模型. 1. 问题描述 长板长度:10m 子板需求:2m: 100; 3m: 50; 5m: 20 - 优化目标:最小化,长板切割总数 ...

  6. snowflake做主键 自增_忘掉 Snowflake,感受一下性能高出 587 倍的全局唯一 ID 生成算法...

    今天我们来拆解 Snowflake 算法,同时领略百度.美团.腾讯等大厂在全局唯一 ID 服务方面做的设计,接着根据具体需求设计一款全新的全局唯一 ID 生成算法.这还不够,我们会讨论到全局唯一 ID ...

  7. mysql序列号生成_忘掉 Snowflake,感受一下性能高出587倍的全局唯一ID生成算法

    今天我们来拆解 Snowflake 算法,同时领略百度.美团.腾讯等大厂在全局唯一 ID 服务方面做的设计,接着根据具体需求设计一款全新的全局唯一 ID 生成算法.这还不够,我们会讨论到全局唯一 ID ...

  8. 忘掉 Snowflake,感受一下性能高出587倍的全局唯一ID生成算法

    今天我们来拆解 Snowflake 算法,同时领略百度.美团.腾讯等大厂在全局唯一 ID 服务方面做的设计,接着根据具体需求设计一款全新的全局唯一 ID 生成算法.这还不够,我们会讨论到全局唯一 ID ...

  9. 基于材料生成算法的工程优化

    文章目录 一.理论基础 1.材料生成算法 (1)模拟化合物 (2)模拟化学反应 (3)模拟化学稳定性 2.MGA算法流程图 二.仿真实验与分析 三.参考文献 一.理论基础 1.材料生成算法 材料生成算 ...

  10. matlab仿真参考文献,生成算法论文,关于AOS自相似业务流等时帧生成算法的Matlab仿真相关参考文献资料-免费论文范文...

    导读:该文是关于生成算法论文范文,为你的论文写作提供相关论文资料参考. (沈阳理工大学信息科学与工程学院,辽宁 沈阳 110159) [摘 要]鉴于网络呈现自相似特性而传统的泊松模型已不再适用于AOS ...

最新文章

  1. 11 个高效的同行代码评审最佳实践
  2. 系统调用回答为什么要用buffer写
  3. ファイルアップロード関連のjQueryプラグイン10攻略
  4. [ASP.NET Core 2.0 前方速报].NET Core 2.0.3 已经支持引用第三方程序集了
  5. .写一个方法 void printScore(int score),输出相应的等级。score代表分数,等级格式如下:
  6. Linux(CentOS)安装apache(httpd),其他电脑无法访问的原因 【iptables打开某端口】
  7. 1982:【19CSPJ普及组】数字游戏 方法二
  8. linux的initrd.img的解压和打包
  9. 高品质空间合成海报,让夜色更迷人
  10. (四)Qt实现自定义模型基于QAbstractTableModel
  11. VC++常见错误原因解析之error LNK2019: 无法解析的外部符号 public: void __thiscall
  12. [转]SecureCRT使用配置详细图文教程
  13. mt4双线macd_指标小课堂|学院首创!独家手机MT4双线MACD指标设置教程
  14. 爬虫日记(7):用urllib和beautifulsoup来实战抓取新闻
  15. Socket发送缓冲区接收缓冲区快问快答
  16. 章文嵩坐镇淘宝双11流量作战室
  17. 使用fir im进行内测托管
  18. Spring MVC之redirect、forward和普通跳转
  19. 黑盒测试技术之等价类划分法
  20. 第三方微信+支付宝个人免签支付源码

热门文章

  1. 可以搜python题答案的app-有哪些可以搜Python题答案的APP
  2. 手机号码校验(手机号---座机号)
  3. Android6.0动态壁纸,全局透明动态壁纸
  4. ADB的使用-简单命令
  5. matlab数组中含有逻辑变量,MATLAB逻辑数组
  6. vsscanf用法解析
  7. 命令行进行ftp的登陆
  8. Linux通过终端查看日志命令
  9. jmeter录制postman脚本
  10. Office - Excel 01