用python-turtle优雅的画椭圆

python-turtle库关于画圆问题

  • 第一次写博客
    • 用自带命令画圆
    • 利用圆的性质画圆
    • 画正多边形
    • 椭圆

第一次写博客

这是我第一次使用 CSDN 写博客,有问题请斧正。最近在做python课程开发,刚好利用python画圆作为讲解,在网上找到了一些画圆的代码,都是出自有图币的一个视频,没有解释原理,为了解决这个问题又重温了一下初中数学…记录一下挺有意思的。

用自带命令画圆

turtle库自带了画圆命令,下面就是一个最常见的画圆代码,不做解释。

import turtle as t
t.color("red")
turtle.circle(30)
turtlr.done()

利用圆的性质画圆

我们知道古人是非常聪明的,利用在圆内切正多边形求圆周率,那么我们也可以反向思维一下,干脆画一个正多边形,当边足够多,多到一个边只占有一个像素点的时候那么肉眼看起来就是一个圆了。思路如下:
每次前进时先向左转3度,然后向前走1像素点那么需要转120次就能画出一个正120边型(3度/360度=120次)这样就很像一个圆了。

import turtlr as t
pen = turtle.Turtle()  #定义画笔实例
a = 1                        #前进的长度
for i in range(120):
	pen.lt(3)               #向左转3度
	pen.fd(a)				#向前走a的步长
print(pen)
turtle.mainloop()

画正多边形

当你试图修改上述代码中的range()和pen.lt()中的数字时,你会发现你又get了新技能,用turtle画正n边形。n取决于range()的取值。只要确保range()是正整数且两数相乘等于360,就可以做出来正n边型。如下是画正方形的代码。(边数小的时候把a变大,会更明显)

import turtlr as t
pen = turtle.Turtle() 
a = 100
for i in range(120):
	pen.lt(3)
	pen.fd(a)
print(pen)
turtle.mainloop()

椭圆

接下来就是这篇文章的核心,也是我为什么写这篇博客的理由。要想画出椭圆,画笔在不同角度的时候前进的长度不一样,我们可以把椭圆拆分成四个部分如下图。画笔的路线是(D-A-B-C)通过观察我们不难发现,从D-A线的弧度越来越大,从A-B线的弧度越来越小。从B-C弧度又开始越来越大,从C-D弧度越来越小。那么我们要是想画一个椭圆就要处理四个部分,是否也意味着我们需要四段代码呢?不是,我们只要对刚才画圆的代码进行修改就行。
当D-A的时候每次前进的步长要不断增大,所以a变大;当A-B的时候每次前进的步长要不断减小,a变小;当B-C的时候每次前进的步长再次增大,当C-D的时候每次前进的步长再次不断减小。我们不难发现一个规律,大小大小。那么我们是否可以用循环加判断来解决呢?
用python-turtle优雅的画椭圆_第1张图片

import turtle
 
pen=turtle.Turtle()                #定义画笔实例
a=1
for i in range(120):                
    if 0<=i<30 or 60<=i<90:        #控制a的变化
        a=a+0.2
        pen.lt(3)                  #向左转3度
        pen.fd(a)                  #向前走a的步长
    else:
        a=a-0.2
        pen.lt(3)
        pen.fd(a)
 
print(pen)
turtle.mainloop()

0<=i<=30和60<=i<=90时a的长度增加,每一步前进的长度增加,30<=i<=60和90<=i<=120时a减小,实现画出椭圆。

你可能感兴趣的:(画图)