python绘画多边形(turtle)

news2024/11/14 21:29:55

目录

前言

正三角形

正四边形

正多边形

总结:


前言

事情的起因是,我今天心血来潮想让openai生成路飞的图像看效果怎么样,他是这样回我的。

 我这一想,这不稳了吗,这么轻松。结果……

import turtle

# 定义画笔颜色和大小
turtle.pensize(3)
turtle.pencolor('#000')

# 设置起始点位置
turtle.penup() # 抬起画笔
turtle.goto(0, 0) # 移动到坐标原点
turtle.pendown() # 落下画笔

# 绘制头部
turtle.circle(50)

# 绘制眼睛(左眼)
turtle.up()
turtle.goto(-20, 70)
turtle.down()
turtle.pencolor('#fff')
turtle.fillcolor('#fff')
turtle.begin_fill()
turtle.circle(15)
turtle.end_fill()

# 绘制眼珠(左)
turtle.up()
turtle.goto(-20, 80)
turtle.down()
turtle.pencolor('#000')
turtle.fillcolor('#000')
turtle.begin_fill()
turtle.circle(5)
turtle.end_fill()

# 绘制眼睛(右眼)
turtle.up()
turtle.goto(20, 70)
turtle.down()
turtle.pencolor('#fff')
turtle.fillcolor('#fff')
turtle.begin_fill()
turtle.circle(15)
turtle.end_fill()

# 绘制眼珠(右)
turtle.up()
turtle.goto(20, 80)
turtle.down()
turtle.pencolor('#000')
turtle.fillcolor('#000')
turtle.begin_fill()
turtle.circle(5)
turtle.end_fill()

# 绘制鼻子
turtle.up()
turtle.goto(0, 40)
turtle.down()
turtle.setheading(-90)
turtle.pencolor('#f00')
turtle.fillcolor('#f00')
turtle.begin_fill()
turtle.forward(20)
turtle.left(90)
turtle.forward(25)
turtle.left(90)
turtle.forward(40)
turtle.left(90)
turtle.forward(25)
turtle.left(90)
turtle.forward(20)
turtle.end_fill()

# 绘制嘴巴
turtle.pencolor('#000')
turtle.up()
turtle.goto(-30, 20)
turtle.down()
turtle.setheading(-60)
turtle.circle(35, 120)

# 绘制帽子
turtle.pencolor('#f00')
turtle.fillcolor('#f00')
turtle.up()
turtle.goto(-55, 100)
turtle.down()
turtle.begin_fill()
turtle.setheading(0)
turtle.forward(110)
turtle.setheading(90)
turtle.forward(25)
turtle.setheading(180)
turtle.forward(60)
turtle.setheading(-90)
turtle.forward(50)
turtle.setheading(180)
turtle.forward(80)
turtle.end_fill()

# 隐藏海龟
turtle.hideturtle()

# 显示画面
turtle.done()

 我的童年瞬间不完整了好吧,这肯定不同意,结果重新的询问最后得到他的另一个回答。

 哇哦~,我倒要看看有多么细节。

import turtle

# 设置画布和画笔属性
canvas = turtle.Screen()
canvas.bgcolor("#fff")
pen = turtle.Turtle()
pen.pensize(3)
pen.speed(10)
pen.ht()

# 开始绘制路飞
pen.penup()
pen.goto(0, -150)
pen.pendown()
pen.pencolor("#000")
pen.fillcolor("#f00")
pen.begin_fill()
pen.circle(150)
pen.end_fill()

# 绘制眼睛(左眼)
pen.penup()
pen.goto(-60, 40)
pen.pendown()
pen.pencolor("#fff")
pen.fillcolor("#fff")
pen.begin_fill()
pen.circle(30)
pen.end_fill()

# 绘制眼珠(左)
pen.penup()
pen.goto(-60, 60)
pen.pendown()
pen.pencolor("#000")
pen.fillcolor("#000")
pen.begin_fill()
pen.circle(10)
pen.end_fill()

# 绘制眼睛(右眼)
pen.penup()
pen.goto(60, 40)
pen.pendown()
pen.pencolor("#fff")
pen.fillcolor("#fff")
pen.begin_fill()
pen.circle(30)
pen.end_fill()

# 绘制眼珠(右)
pen.penup()
pen.goto(60, 60)
pen.pendown()
pen.pencolor("#000")
pen.fillcolor("#000")
pen.begin_fill()
pen.circle(10)
pen.end_fill()

# 绘制嘴巴
pen.penup()
pen.goto(0, -20)
pen.pendown()
pen.pencolor("#000")
pen.right(45)
pen.circle(100, 90)

# 绘制帽子
pen.penup()
pen.goto(0, 60)
pen.pendown()
pen.pencolor("#000")
pen.fillcolor("#f00")
pen.begin_fill()
pen.right(135)
pen.forward(120)
pen.right(90)
pen.forward(60)
pen.right(90)
pen.forward(80)
pen.right(90)
pen.forward(50)
pen.right(90)
pen.forward(80)
pen.right(90)
pen.forward(60)
pen.end_fill()

# 绘制帽边
pen.penup()
pen.goto(-40, 85)
pen.pendown()
pen.pencolor("#000")
pen.right(60)
pen.fillcolor("#fff")
pen.begin_fill()
pen.forward(80)
pen.right(120)
pen.forward(80)
pen.end_fill()

# 完成绘制
canvas.exitonclick()

 我好像不干净了-_-,这简直了。

于是就想自己尝试画一下,首先就是两个思路,第一找一个好绘画的图形,第二就是学习turtle方面的知识,毕竟就是第一次接触,还不知道怎么使用。

找了半天也没找到简单的图片,画曲线好像还要通过circle来画,于是就想先从绘制正多边形开始。

正三角形

python练习实战(五)-turtle库的使用_turtle.pensize_小王不叫小王叭的博客-CSDN博客icon-default.png?t=N5K3https://blog.csdn.net/weixin_45573296/article/details/124032331

这里用到的几个函数都注释了他们的作用,这种笔直笔直的图形还是比较绘画的,就是先走一段距离,然后旋转角度,继续走就行了。

这个我第一次接触的东西就是这个海龟图形,他的定义就是如下所示的。

海龟图形(Turtle Graphics)是一种基于向前、向后移动、旋转和绘制等简单命令的矢量绘图系统。它最初是由Wally Feurzeig、Seymour Papert和Cynthia Solomon在1960年代初期开发的语言Logo中的一个重要组成部分。在Logo语言中,用户可以通过编写简单的命令来控制一个被称为“海龟”的图形对象,通过在屏幕上绘制直线、曲线等来创建图形图像。

Turtle Graphics在计算机图形学和计算机科学教育中广泛应用。它是一种简单且易于理解的绘图系统,适合用于初学者和儿童的教育。Turtle Graphics不仅可以用于绘制二维图形,还可以扩展到三维图形的绘制。

在现代编程语言中,也有许多Turtle Graphics的实现,例如Python语言中的turtle库。通过这些库,用户可以使用各种各样的命令和方法,来控制和绘制海龟图形,并获得类似Logo语言的绘图效果。


#画三角形
import turtle

#设置画笔粗细
turtle.pensize(3)
#设置画笔颜色
turtle.pencolor('black')

# 绘制三角形
#将海龟图形移动到画布上指定的位置(算是为了居中绘画吧)
turtle.goto(-50,0)
#在当前位置方向移动一定的距离
turtle.forward(100)
#turtle向左旋转120度
turtle.left(120)
#在当前位置方向移动一定的距离
turtle.forward(100)
#turtle向左旋转120度
turtle.left(120)
#在当前位置方向移动一定的距离
turtle.forward(100)

# 隐藏turtle图形(箭头)
turtle.hideturtle()

# 暂停程序,停止画笔绘制,但绘图窗体不关闭,直到用户关闭pythonTurtle图形化窗口为止
turtle.done()

其实这个也可以用循环来完成。原理是一样的。

# 绘制三角形
#将海龟图形移动到画布上指定的位置(算是为了居中绘画吧)
turtle.goto(-50,0)
for i in range(3):
    turtle.forward(100)
    #左转120度
    turtle.left(120)

正四边形

移动的话有些人用的是turtle.fd(100) ,有些人用的是 turtle.forward(100) 他们都表示让turtle向前移动100个像素的距离。这个看个人的习惯吧(个人理解,有错误请大佬指出

#画四边形
import turtle
#设置画笔粗细
turtle.pensize(3)
#设置画笔颜色
turtle.pencolor('black')

# 绘制四边形
#将海龟图形移动到画布上指定的位置(算是为了居中绘画吧)
turtle.goto(-50,0)
for i in range(4):
    turtle.forward(100)
    # 左转90度
    turtle.left(90)

# 隐藏turtle图形(箭头)
turtle.hideturtle()

# 暂停程序,停止画笔绘制,但绘图窗体不关闭,直到用户关闭pythonTurtle图形化窗口为止
turtle.done()

正多边形

写了这两个之后,相信大家都已经发现了规律,首先就是有很多的地方是一样的,然后就循环那里有些不同,循环的次数就是边的个数,偏转的角度就是他们的外角。

可以先由正多边形的内角和公式得到(n-2)*180,再得到每个内角就是((n-2)*180)/n;

外角就是180-((n-2)*180)/n=360/n;

那只要输入得到边数n就行了。


遇到了几个问题:

问题一:用PyCharm运行的时候画笔的界面在地下没有置顶显示,这个就很不舒服了,于是就想让他置顶输出。

如何让PyCharm的turtle窗口总在最前 | 青山绿水 (huhexian.com)icon-default.png?t=N5K3https://www.huhexian.com/35025.html

#设置窗口显示置顶
turtle.Screen().getcanvas().winfo_toplevel().attributes("-topmost", True)

 问题二:我只考虑的输出,但是没有考虑输出的位置,当n取值太大的时候,整个绘制的图案就贴到边沿上面了。于是就让绘制的位置也和n有关系,整体下移一点。

#将海龟图形移动到画布上指定的位置(算是为了居中绘画吧)
turtle.goto(-50,-10*n)

问题三:turtle.goto()会有多余的线条一起画出来。这个可以先把画笔抬起,然后放下。

#将海龟笔尖提起
turtle.penup()
#将海龟图形移动到画布上指定的位置(算是为了居中绘画吧)
turtle.goto(-50,-10*n)
#将海龟笔尖落下
turtle.pendown()

 完整代码:

#绘制正多边形
import turtle

#用户输入正多边形的边长n(我们需要的是整型的数据,所以这里需要强制转换一下)
n=int(input("请输入将绘制的多边形边长:"))
#计算外角
exteriorAngle=360/n

#设置画笔粗细
turtle.pensize(3)
#设置画笔颜色
turtle.pencolor('black')
#获取绘画窗口对象
win=turtle.Screen()
#设置窗口显示置顶
turtle.Screen().getcanvas().winfo_toplevel().attributes("-topmost", True)

#将海龟笔尖提起
turtle.penup()
#将海龟图形移动到画布上指定的位置(算是为了居中绘画吧)
turtle.goto(-50,-10*n)
#将海龟笔尖落下
turtle.pendown()
#循环绘制
for i in range(n):
    #移动100像素?
    turtle.forward(100)
    #左转外角的角度
    turtle.left(exteriorAngle)

# 隐藏turtle图形(箭头)
turtle.hideturtle()

# 暂停程序,停止画笔绘制,但绘图窗体不关闭,直到用户关闭pythonTurtle图形化窗口为止
turtle.done()

总结:

这个的话还是比较基础的,都是一些直线,有时间还是想画一下的,不过这种好像就是要花时间去找点,不知道各位大佬有没有更好的方法,还是想画动漫人物,目前看到的好像有代码,但是没有注释,不知道是不是因为注释写了也没什么用的原因,但是整个代码堆下来,还是不怎么友好的。起因就是比较有趣,虽然现在还写不出来,但是还是会朝着努力的。

希望越来越好,像今天修改的个性签名一样

你若盛开,蝴蝶自来

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/672580.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Visual Studio】报错 C1083,使用 C++ 语言,配合 Qt 开发串口通信界面

知识不是单独的,一定是成体系的。更多我的个人总结和相关经验可查阅这个专栏:Visual Studio。 文章目录 问题解决方案Ref. 问题 使用 C 语言,配合 Qt 开发串口通信界面时,报错代码 C1083。 复制一下错误信息,方便别人…

【C语言进阶】编译链接

文章目录 📖程序的两种环境 🔖翻译环境🔖执行环境 📖详解翻译环境🔖从人的角度去看编译链接🔖预编译🔖编译🔖汇编🔖链接🔖符号表的作用 📖执行环境…

外贸订单管理平台有哪些?

外贸订单的管理是外贸出口业务中非常重要的一项管理工作,订单能否实现准时交付则需要涉及到各种流程顺畅的支持。那么外贸订单管理平台有哪些?有孚盟软件。 首先,外贸订单管理平台主要是解决外贸公司的订单查询与管理,面对大量不…

2.4G无线收发芯片 XL2400,SOP8封装,外挂MCU使用

XL2400 芯片是工作在 2.400~2.483GHz 世界通用 ISM 频段的单片无线收发芯片。该芯片集成射频收发机、频率收生器、晶体振荡器、调制解调器等功能模块,并且支持一对多组网和带 ACK 的通信模式。发射输出率、工作频道以及通信数据率均可配置。芯片已将多颗外围贴片阻容…

mysql错误-1055 - Expression #1 of SELECT list is not in GROUP BY clause 解决方案

目录 业务场景发现问题表结构表数据sql查询 分析问题验证 解决问题方案一方案二方案三 注意事项 业务场景 当遇到数据库重复数据,就要将数据进行分组,取其中一条来展示,此时就要用到group by语句。 但当mysql的版本高于5.7时,在执…

ESP32设备驱动-TCA9548A-I2C多路复用器驱动

TCA9548A-I2C 多路复用器驱动 文章目录 TCA9548A-I2C 多路复用器驱动1、TCA9548A介绍2、硬件准备3、软件准备4、驱动实现4.1 TCA9548A总线复用实现4.2 驱动多个OLED显示屏4.3 驱动多个BME280传感器在本文中,将介绍如何使用 TCA9458A I2C 多路复用器扩展 I2C 总线端口。 如果你…

【Python 基础篇】Python 列表及列表常用函数

文章目录 一. 什么是列表二. 列表的创建和访问2.1 创建列表2.2 访问列表元素 三. 列表的操作3.1 修改列表元素3.2 列表的添加和删除元素3.2.1 添加元素3.2.2 删除元素 3.3 列表的排序3.4 判断元素是否在列表中 四. 列表的常用函数和方法五. 总结 一. 什么是列表 在Python中&am…

CLO-GitHub网站注册登录

一、GitHub GitHub是一个面向开源及私有软件项目的托管平台,仅支持Git作为唯一的版本库格式进行托管。 二、登录官网 网站:https://github.com/ 2.1 注册Sign up Enter your Email(输入邮箱地址)->Continue-> ->Create a…

HCIP网络笔记分享——VLAN及MPLS多标签协议交换

第三部分 HCIA回顾一、MPLS多协议标签交换1、标签交换2、静态LSP搭建3、LDP协议4、本地LDP会话建立的过程 二、MPLS VPN的配置使用MPLS VPN 三、实际情况配置1、VLAN第一步:创建VLAN第二步:将接口划入VLAN第三步:配置trunk干道 2、U/T标记3、…

AI绘画基于 Kaggle 10 分钟搭建 Stable Diffusion(保姆级教程)

AI绘画基于 Kaggle 10 分钟搭建 Stable Diffusion(保姆级教程) 一、引言二、安装教程1. 注册 Kaggle2. Edit My Copy3. 进行手机号的验证4. 打开 “internet off” 开关,并选择显卡5. 开启 session,运行脚本 三、主界面介绍四、注…

车辆派遣管理系统——需求

文章目录 一、背景二、用户的特点三、系统范围四、系统体系结构系统总体架构描述: 五、数据库设计E-R图数据字典 六、工作量估算七、项目燃尽图 一、背景 车辆派遣管理系统是提供对车辆派遣高效管理的系统,自动生成结算结果;可以有效节约车辆…

侯捷——1.C++面向对象高级开发 总结

侯捷——1.C面向对象高级开发 总结 前面的几个视频没有总结,等以后有空再补 7. Class with pointer member(s) —— string 类 该string类,内含指针,所以要自己写构造函数和析构函数,不能使用默认的构造函数和析构函数。 包含…

MHA部署

目录 高可用集群MHA 环境准备 设置服务器免密通联 修改主机名和hosts文件(四台) 四台服务器相同操作 四台服务器相同操作-关闭防火墙 四台服务器-免密配置-生成密钥 四台服务器-免密配置-复制密钥 将authorized_keysau文件发送给node2/3/4 测试是否免密登陆其他主机 …

0018-TIPS-pawnyable : NULL-Pointer-Dereference

原文 NULL Pointer Dereference 题目下载 环境宽松限制 启动选项中可以看到,SMAP在被攻击的机器上被禁用。除非禁用 SMAP,否则无法利用本章中讨论的 NULL 指针取消引用。 还可以尝试启动该内核并输入以下命令: $ cat /proc/sys/vm/mmap_mi…

chatgpt赋能python:Python文件打包:了解基本概念和步骤

Python文件打包: 了解基本概念和步骤 Python开发现在已经越来越成为了一种主流开发方式,然而,当我们的代码在多个环境中运行时,我们可能会遇到各种问题。Python文件打包就起到了非常重要的作用,它可以把我们的代码和环…

java ArrayList()常用详解

文章目录 java ArrayList()常用详解构造方法构造一个具有指定初始容量的空列表构造具有指定初始容量的空列表 常用方法指定的元素追加到此列表的末尾泛型 用来约束集合中存储数据的数据类型在次列表中的指定位置插入指定的元素返回此列表中指定位置的元素删除该列表中指定位置的…

spring 解决循环依赖

spring 解决循环依赖 1、什么是循环依赖? 循环依赖其实就是循环引用,也就是两个或则两个以上的bean互相持有对方,最终形成闭环。比如A依赖于B,B依赖于C,C又依赖于A。如下图: spring的单例对象的初始化主要…

DAC0832

芯片简介: DAC0832是采样频率为八位的D/A转换芯片,集成电路内有两级输入寄存器,使DAC0832芯片具备双缓冲、单缓冲和直通三种输入方式。D/A转换结果采用电流形式输出。若需要相应的模拟电压信号,可通过一个高输入阻抗的线性运算放…

Redmi Book Pro 15 2022 笔记本电脑更换硬盘总结

我的电脑型号是Redmi Book Pro 15 2022 锐龙版,早在6月15日磁盘空间就告急了,正好遇上618就打算更换硬盘,直到今天更换成功,特此来记录一下 目录 一、更换硬盘前准备工作二、更换硬盘三、硬盘迁移以及分区四、总结 本文的更换过程…

实验记录之——mac用visual studio code配置opencv

安装opencv 用Homebrew安装opencv brew install wget brew install cmake brew install opencv看来都安装过了hhh 通过下面命令再次检测安装的opencv版本 brew info opencv全部都打绿色的勾,应该就是都安装完了。 Vscode配置c/c环境 配置cpp项目可以看下面链接…