高中时候,从一个哥们儿那学到了怎么画上边这个图。其实不难,就是随便画个框,然后在框里边画类似于螺旋线的东西,循环迭代,最后汇聚到一起的时候就完成。

突然想到,可不可以写程序来画这个?

  • 分析整理一下:

要素 要求、说明
外边框 内角不能超过180度[否则无法正常循环]
螺旋线偏角 [偏角:相对于原来的边而言]不能太大
每次绘线长度 这个需要计算
特殊情况 随机边框总会长短不一,会导致某些较短的边在循环迭代中长度首先变得过短,那么需要跳过该边[如上动图中左下角的短边】,否则会导致异常
结束判断 1. 如果迭代过程中,由于跳过“边”导致当前多边形边数小于2,,那么停止;或者,2. 不断地迭代,边数满足要求,但是当前最长边小于某个“小值”,那么结束。
  • 内角大于180度:

  • 偏角过大:

  • 跳边条件:

【途中绿色边】


结束条件很判断很容易实现,偏角也可以设置的比较小。那么还剩下的就是每次绘线的长度,该怎么计算?

其实方法就在标题里,正弦定理。

是怎么跟正弦定理扯上关系的呢,上图:

  • 假设L1,L2为多边形的两条相邻边。

首先绘出的是边框,所以,我们可以很容易记录每条边的长度,以及其相对于x轴的偏角{0~360},甚至多边形顶点的坐标。或者说,我们在绘制边框的时候,按我们的规则,让绘制的同时,让程序记录下我们需要的这些基础数据。

  • 所以,按照这个思路。途中蓝色的数据都是已知值。那么很容易可以得到:

Θ3 = Θ2 - Θ1
Θ4 = 180 - Θ3
Θ5 = 180 - Θ4 - dΘ

参数 说明
L1 ab边的长度
L2 bc边的长度
Θ1 ab边相对于x轴的偏角[0-360]
Θ2 bc边相对于x轴的偏角[0-360]
每次画螺旋线的偏角
L3 当前螺旋线(长度)

于是,根据正弦定理:

L1 / sin(Θ5) = L3 / sin(Θ4) = dL2 / sin(dΘ)

到这里,我们已经算得了需要的参数。


  • 初始绘图数据约定

细细分析,完成一次运算,所用到的无非两个数据:ab向量,bc向量。

所以在存取数据初始数据的时候,可以约定如下:


  • 循环迭代过程

其实数据更新过程很好理解,每次画线后,需要对当前两个向量更新。ab‘向量长度,偏角都改变,但是起始坐标没改变。bc’向量偏角没变,但是长度与起始坐标改变。

显而易见,这些推理适用于符合刚开始约束条件下的所有相邻边。


  • 跳边情况[硬骨头]

就如刚开始分析的那样,有的边,他画着画着就没了,所以程序应该及时识别出它,然后剔除掉。

该怎么去判断呢,上图:

需要跳边,都是L2过短,如上图。

由于L3,dL2,都是根据正弦定理得出[其实追究到底,是由L1和Θ1,Θ2,dΘ通过一些列计算得到的所有数据]。也就是说,整个三角形的角的大小、关系是确定的,所以当L2过短时,必然出现上图情况。


到这里,分析的已经差不多了。

余下 说明
边框绘制并获取约定数据 两种思路:随机绘制边框/半手动绘制边框。随机绘制的时候,边框闭合问题,边框合格判定问题;半手动绘制时,需要与程序交互,可实现相对复杂的边框以及嵌套。
由一系列有序坐标点(逆时针)获取约定数据 偏角、长度的计算

余下的,余下的佛系更新吧。


这是整个小项目 目前能做到的样子


将视频转作字符动画【UI加持操作更简单】

2020-QuartusⅡ13.1安装,踩雷

腾讯良心之作-桌面整理

奇怪的思路_让你的桌面更简洁

将图片绘制到Excel表格

好用的屏幕取色器

python制作枯燥的字符图

PIL Image.paste() 透明像素问题

图片变字符画,其实很简单

干货!Windows频幕二维码识别小工具

python 图片拼接、图片转pdf

今日头条美图爬取,有你想要的

python 精美壁纸、简单爬虫,告别壁纸荒

Python 图片拼心,表白利器

Python 以字成图,花式表白,脱单趁早

奇妙的“字符26进制”

从视频中提取图像

[Python-turtle]正弦定理能擦出多漂亮的火花?【1】相关推荐

  1. python画笔的尺寸_Matplotlib 常用画图命令总结:使用 Python 在论文中画出一手漂亮的数据图...

    介绍 本文不是一篇详尽的.从简到繁的 Maplotlib 画图教程,而是用各种例子快速直观地让读者上手 Matplotlib 画图中的一些常用的.基础的操作.本文不对各种数据图(折线图.柱状图等)作介 ...

  2. Python仅四步写出完整漂亮的五子棋

    最近比较闲,将写游戏练习python的心得发出来.先以五子棋为例,实现基本功能简单四步即可写出完整漂亮的五子棋,代码不过140余行.现一步一步分解发出来,方便初学者交流. 虽然代码看上去不是很专业,不 ...

  3. python语言创意绘画-Python turtle库能画出什么好玩的东西?

    [教你用Python画蛋糕] 我曾经给别人送过的生日礼物是一段Python代码... 用了Python的turtle package,仿照这个网站的代码:Layer Cake using Python ...

  4. Matplotlib 常用画图命令总结:使用 Python 在论文中画出一手漂亮的数据图

    介绍 本文不是一篇详尽的.从简到繁的 Matplotlib 画图教程,而是用各种例子快速直观地让读者上手 Matplotlib 画图中的一些常用的.基础的操作.本文不对各种数据图(折线图.柱状图等)作 ...

  5. python turtle画画 30排以内_Python竟能画这么漂亮的花,帅呆了(代码分享)

    阅读本文大概需要3分钟 关于函数和模块讲了这么久,我一直想用一个好玩有趣的小例子来总结一下,同时也作为实战练习一下. 趣味编程其实是最好的学习途径,回想十几年前我刚毕业的时候,第一份工作就给手机上写a ...

  6. python程序的书写特点_不一样的Python代码写法,让你写出一手漂亮的代码

    Python语言这么火,有很多同学是从其他语言转行过来的(比如c++,java语言),多多少少写代码的时候也会受其他语言的影响!而对于刚开始学语言的小白同学来说,解决问题的思路有的时候会比较单一,其实 ...

  7. 中软python编码规范考试试题_卓越分享 | 如何写出一手漂亮的Python代码?

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 Python语言这么火,有很多同学是从其他语言转行过来的(比如c++,java语言),多多少少写代码的时候也会受其他语言的影响!而对于刚开始学编程的小白同 ...

  8. python什么字体好看_七个不一样的Python代码写法,让你写出一手漂亮的代码

    原标题:七个不一样的Python代码写法,让你写出一手漂亮的代码 Python语言这么火,有很多同学是从其他语言转行过来的(比如c++,java语言),多多少少写代码的时候也会受其他语言的影响!而对于 ...

  9. 用python画漂亮的图案-使用 Python Turtle 设计简单而又美丽的图形

    原标题:使用 Python Turtle 设计简单而又美丽的图形 正文 看看本文中这些美丽的图画.正是这样的事情让我爱上了 turtle.优秀的程序员会认为turtle是"落后原始的&quo ...

  10. 不一样的Python代码写法,让你写出一手漂亮的代码

    Python语言这么火,有很多同学是从其他语言转行过来的(比如c++,java语言),多多少少写代码的时候也会受其他语言的影响!而对于刚开始学语言的小白同学来说,解决问题的思路有的时候会比较单一,其实 ...

最新文章

  1. 负载均衡算法-响应速度均衡
  2. 南京超过广州!4 月程序员工资统计出炉,平均 14596 元
  3. eclipse常用设置之自动格式化
  4. 科大讯飞cordova语音插件填坑及api介绍
  5. python 宏处理库_常用的Python库,给大家分享一下!
  6. 剔除异常值栅格计算器_R语言系列 数据清洗3 异常值处理
  7. 可实现自动设置尺寸的图片上传类
  8. 如何加入Dave英语学习小组
  9. 如何训练解决问题的能力?
  10. 四阶龙格库塔c语言,四阶龙格库塔算法的C语言实现
  11. std::future ---C++17 多线程
  12. 2019-02-26-GCN资料
  13. 学生专用计算机abs什么意思,出现abs标志什么意思
  14. Nginx配置443端口
  15. 立创开源 WCHLink/DapLink下载器 沁恒
  16. 红黑树解析(RB-Tree)
  17. DataStory·2017大数据商业创新论坛(上海站)圆满结束
  18. 键盘的复制粘贴快捷键总是需要重复多次才起作用
  19. 【腾讯TMQ】MBT探索系列 – PRE/POST 模型在网络接口测试MBT的应用和探索
  20. Navicat Premium链接MySQL时出现2059错误解决方法

热门文章

  1. python递归排列组合_Python 排列组合
  2. 逻辑回归实现鸢尾花分类
  3. cms php 免费,十大免费PHP内容管理系统(CMS)
  4. Unity说明文档翻译-Time Manager
  5. 双十一,程序员可太难了
  6. php展厅控制系统,展厅展馆设计智能中控系统
  7. 百度招聘实习生:网页搜索部_语法研究实习工程师(七种语
  8. c 连接oracle otl,C++类库:OTL通用的数据库连接类库
  9. [架构]京东咚咚架构演进
  10. Docker 部署 IntelliJ Projector,愉快玩耍 Android Studio、Idea、PyCharm 等 Swing 应用