利用Python的turtle库画自行车

前言

前言总得说点什么。疫情在家,慕课上学习北理工嵩天等老师的《python语言程序设计》[1],觉得turtle画图,挺有意思,既然骑不了自行车,那就画个自行车。思路嘛,理了理,最后决定使用坐标点标记最为简单,此时可以利用turtle.xcor()和turtle.ycor()获得当前标记点的turtle坐标,即笛卡尔坐标的(x,y)。形状方面,都采用最简单的几何图形,对于复杂曲线可以按需使用贝塞尔曲线,这里简单起见没有涉及。

实现代码

代码没有进行太多整理,思维走到哪就写到哪。

'''Draw a bike
By WDL 2020-3-6'''
import turtle as te
import numpy as np
Width=800
Height=800 #设置窗口大小
te.setup(Width,Height,200,200)
te.speed(13)def Moveto(x,y):         #移动到svg坐标下的(x,y)te.penup()te.goto(-Width / 2 + x, Height / 2 - y)
def Linkto(x,y):te.goto(-Width / 2 + x, Height / 2 - y) #连接到移动到svg坐标下的(x,y)def BickDraw(xleftwheel,yleftwheel,axisdis,radis): #画自行车te.seth(0)#恢复初始朝向Moveto(xleftwheel,yleftwheel)#定位左前轮位置 坐标为SVG坐标te.color('gray', 'purple')  # 指定边界颜色和填充颜色te.pendown()for i in range(4): #左轮te.begin_fill()te.fd(radis)te.right(90)te.circle(-1*radis, 45)te.right(90)te.fd(radis)te.end_fill()te.left(135)Moveto(xleftwheel+8, yleftwheel)#左圆心 8为小圆半径te.pendown()te.seth(-90)te.pensize(4)te.fillcolor("black")te.begin_fill()te.circle(-8)te.end_fill()Moveto(xleftwheel+radis, yleftwheel)te.pendown()te.seth(-90)te.pensize(10)te.pencolor("black")te.circle(-1*radis)te.seth(0)  # 恢复初始朝向Moveto(xleftwheel+axisdis, yleftwheel) #右大圆心te.color('gray', 'purple')  # 指定边界颜色和填充颜色te.pensize(1)te.pendown()for i in range(4): #右轮te.begin_fill()te.fd(radis)te.right(90)te.circle(-1*radis, 45)te.right(90)te.fd(radis)te.end_fill()te.left(135)Moveto(xleftwheel+axisdis+8, yleftwheel)#右圆心 8为小圆半径te.pendown()te.seth(-90)te.pensize(4)te.fillcolor("black")te.begin_fill()te.circle(-8)te.end_fill()Moveto(xleftwheel+axisdis+radis, yleftwheel)te.pendown()te.seth(-90)te.pensize(10)te.pencolor("black")te.circle(-1*radis)Moveto(xleftwheel, yleftwheel)#画前叉te.color('black', 'gray')te.begin_fill()te.pendown()te.pensize(4)te.seth(80)#设定角度80度te.fd(2*radis)te.seth(135)te.pensize(10)te.fd(40)te.seth(45)te.fd(20)te.bk(20)te.right(90)te.fd(40+15+40)te.seth(45)te.fd(20)te.bk(20)te.left(90)te.fd(40)te.pensize(4)Linkto(xleftwheel, yleftwheel) #连接到原始坐标点te.end_fill()te.seth(80) #画斜杠te.color('black', 'gray')te.fd(120)xtemp=te.xcor()ytemp=te.ycor() #记录左前叉坐标,注意此为海龟坐标#需要考虑坐标变换 画脚蹬xrtwheel= -Width / 2 + (xleftwheel + axisdis)yrtwheel= Height / 2 - yleftwheel #转换为海龟坐标系te.penup()te.goto(xrtwheel-np.abs(xtemp-xrtwheel) / 2, yrtwheel)# 假设座子初始位置  位于距离1/2处te.pendown()te.seth(90)te.fd(np.abs(ytemp - yrtwheel)) #到达相应高度smark = te.xcor()te.seth(0)te.color('black','gray')te.begin_fill()te.fd(10)te.seth(-90)te.fd(np.abs(ytemp - yrtwheel) + 20)te.seth(180)te.fd(10)te.goto(smark, ytemp)te.seth(90)for i in range(5):te.fd(10)te.right(90)te.seth(-180)#画座子te.fd(20)te.seth(30)te.fd(50)te.seth(-90)te.fd(50/2)te.goto(smark, ytemp+10)te.seth(-90)te.fd(20)#画前杠和后杠te.goto(xtemp, ytemp)te.goto(smark,ytemp)te.seth(0)te.fd(10)te.goto(xrtwheel,yrtwheel)te.goto(smark, ytemp)te.end_fill()te.penup()#画牙盘te.goto(xtemp,ytemp)te.pendown()te.seth(0)te.begin_fill()te.fd(15)te.goto(smark,yrtwheel)te.goto(xtemp,ytemp)te.end_fill()te.penup()te.goto(smark,yrtwheel)te.pendown()te.begin_fill()te.seth(30)te.fd(12)te.goto(xrtwheel,yrtwheel)te.goto(smark,yrtwheel)te.seth(-90)te.fd(20)te.seth(0)te.circle(20)te.end_fill()te.penup()#画脚蹬te.goto(smark,yrtwheel)te.pendown()te.seth(-135)te.fd(20+15)te.right(90)te.fd(20)te.left(90)te.fd(10)te.left(90)te.fd(30)te.left(90)te.fd(30+5)BickDraw(300,400,250,80)
Moveto(300+250,400)
te.pendown()
te.seth(-80)
te.fd(20)
te.seth(60)
te.fd(15)
te.seth(-60)
te.fd(15)
te.seth(80)
te.fd(20)
te.penup()
te.seth(0)
te.fd(10)
te.pendown()
te.circle(-10,180)
te.seth(90)
te.fd(20)
te.penup()
te.seth(0)
te.fd(20)
te.pendown()
te.seth(-90)
te.fd(20)
te.left(90)
te.fd(10)
te.ht()
te.done()

效果

效果自我感觉还算可以。

参考文献
[1]嵩天等,《python语言程序设计》,慕课. http://www.icourse163.org/course/BIT-268001

利用Python的turtle库画自行车相关推荐

  1. 利用python的turtle库画一个图形

    今天我们用python的turtle库制作一个简单的图形(新手必看) [注:turtle是python的标准自带库,无需安装!] 好的废话不多说我们开始写代码 #制作人:中将 #一起自学python ...

  2. 利用python的turtle库画五星红旗

    目录 1.总体思路 2. 代码展示 3.代码运行效果 1.总体思路 找到标准五星红旗的描述,如下第一张图(来源百度百科).找到五星红旗墨线图如下第二张图. 我们先定义一个小方格为10像素,画的五个五角 ...

  3. 利用python中turtle库画小人发射爱心

    这几天在抖音上用C语言画心挺火的,然后处于兴趣吧,正好现在在学习python,我就想着用python来画一个小人发射爱心吧,跟那种用C语言写的不同,他们直接是printf出来的,但咱是画出来的,哈哈哈 ...

  4. 用python画玫瑰花简单-利用python的turtle库画一朵简单的玫瑰花,并添加文字

    # 画玫瑰花的代码是参考网上的, 文字添加代码是自己写的,画布大小是自己设置的 import turtle # 设置画布大小 # turtle.screensize(canvwidth=None, c ...

  5. python画简单花的代码_利用python的turtle库画一朵简单的玫瑰花,并添加文字

    # 画玫瑰花的代码是参考网上的, 文字添加代码是自己写的,画布大小是自己设置的 import turtle # 设置画布大小 # turtle.screensize(canvwidth=None, c ...

  6. 用python画玫瑰花教程-利用Python的turtle库绘制玫瑰教程

    用Python的turtle库绘图是很简单的,闲来无事就画了一个玫瑰花,下面奉上源码.... 源码: ''' Created on Nov 18, 2017 @author: QiZhao ''' i ...

  7. 利用Python的turtle库绘制四叶草

    利用Python的turtle库绘制四叶草 turtle库的基本使用 turtle库属于Python的标准库,即可以直接用import导入,无需额外安装下载. 这个博主写的蛮好的,我就不献丑了嘿嘿嘿( ...

  8. 用python的Turtle库画一个笑脸

    用python的Turtle库画一个笑脸 最近刚了解到python的turtle库,就简单的尝试一下,画一个笑脸. 效果图: 效果图看起来和原图的差别还是有点大,但是没关系,这只是一个尝试而已. 附上 ...

  9. 使用python的turtle库画表情包

    使用python的turtle库画表情包 话不多说,先上效果图,然后是代码 代码如下: import turtleturtle.penup() turtle.goto(-80,20) turtle.c ...

最新文章

  1. SWPU ACM2020 年预备队员选拔赛 题解
  2. 计算机组成原理中12H是什么,计算机组成原理课程实习报告.doc
  3. ubuntu下nextcloud性能和安全设置优化_Ubuntu linux 18.04安装图解及IPV6协议处理和优化...
  4. Normal Bayes 分类器过程详解
  5. 端计算(2)-android studio 的sdk,avd,grade及其它缓存配置
  6. Angular self study 3 - data binding
  7. 2015美国数学建模a代码c语言,1985~2015美国大学生数学建模竞赛题目集锦.docx
  8. jfinal文件上传
  9. [html] 如何禁止web端的页面缩放?
  10. 八数码c语言编程深度搜索,广度优先搜索解 八数码, 求意见, 求bug/
  11. Linux下搭建AP
  12. 一段和别人的对话,没事写出来(杂项)
  13. 【JWT】JWT+HA256加密 Token验证
  14. apache camel file(二)
  15. PhoenixFramework自动化测试平台部署初始化说明
  16. 遗传算法原理及应用二(交叉算子、变异算子与运行参数选择)
  17. Markdown编辑器-MarkdownPad下载与安装(win10)
  18. 优动漫PAINT的界面如何适配数位屏/平板?
  19. 常用优化网页加载速度方法
  20. 用好这 42 款 Chrome 插件,每年轻松省出一个年假

热门文章

  1. 失去5G先机或致OPPO走向衰落
  2. 618最值得入手的数码产品、最值得买的数码推荐
  3. 除了富士康,国内云计算市场还有哪些玩家?
  4. 利用3DMax整理UE5模型材质卡槽
  5. 【华为机试真题 Python实现】圆桌队列【2022 Q2 | 200分】
  6. 高精度定位技术有哪些
  7. Unity+Pico 手柄按键控制
  8. UninstallTool(Windows软件卸载工具)--快捷、方便卸载电脑中的软件
  9. vuex getters、mapGetters、...mapGetters(三)
  10. 哪个网站有php视频资源,php的http协议视频资源的推荐