如何用turtle画圆、五角星和椭圆等

Jasmine ·
更新时间:2024-11-10
· 897 次阅读

文章目录1. turtle的异常报错2. 多边形、圆、五角星2.1 十边形2.2 圆2.3 五角星3. 椭圆和多边形3.1 六边形3.2 椭圆3.3 旋转和移动椭圆 1. turtle的异常报错

turtle模块和pycharm有冲突,如果出现下面这种不提示代码而且标黄的情况。
在这里插入图片描述

需要进入turtle.py源文件里面找到下面这段代码并将这段代码注释掉。

# __all__ = (_tg_classes + _tg_screen_functions + _tg_turtle_functions + # _tg_utilities + ['Terminator']) # + _math_functions)

然后再在这段代码后面加入下面一段代码就可以正常使用了。

__all__ = ['ScrolledCanvas', 'TurtleScreen', 'Screen', 'RawTurtle', 'Turtle', 'RawPen', 'Pen', 'Shape', 'Vec2D', 'back', 'backward', 'begin_fill', 'begin_poly', 'bk', 'addshape', 'bgcolor', 'bgpic', 'bye', 'clearscreen', 'colormode', 'delay', 'exitonclick', 'getcanvas', 'getshapes', 'listen', 'mainloop', 'mode', 'numinput', 'onkey', 'onkeypress', 'onkeyrelease', 'onscreenclick', 'ontimer', 'register_shape', 'resetscreen', 'screensize', 'setup', 'Terminator', 'setworldcoordinates', 'textinput', 'title', 'tracer', 'turtles', 'update', 'window_height', 'window_width', 'write_docstringdict', 'done', 'circle', 'clear', 'clearstamp', 'clearstamps', 'clone', 'color', 'degrees', 'distance', 'dot', 'down', 'end_fill', 'end_poly', 'fd', 'fillcolor', 'filling', 'forward', 'get_poly', 'getpen', 'getscreen', 'get_shapepoly', 'getturtle', 'goto', 'heading', 'hideturtle', 'home', 'ht', 'isdown', 'isvisible', 'left', 'lt', 'onclick', 'ondrag', 'onrelease', 'pd', 'pen', 'pencolor', 'pendown', 'pensize', 'penup', 'pos', 'position', 'pu', 'radians', 'right', 'reset', 'resizemode', 'rt', 'seth', 'setheading', 'setpos', 'setposition', 'settiltangle', 'setundobuffer', 'setx', 'sety', 'shape', 'shapesize', 'shapetransform', 'shearfactor', 'showturtle', 'speed', 'st', 'stamp', 'tilt', 'tiltangle', 'towards', 'turtlesize', 'undo', 'undobufferentries', 'up', 'width', 'write', 'xcor', 'ycor'] 2. 多边形、圆、五角星

将360°分为n份,每次画一条长度为m的线段就改变(360/n)角度,这样就能画出边长为m的n边形了。当边的个数足够多时,多边形就变成圆了,代码如下。

import turtle, math turtle.setup(800, 800) #设置画布 turtle.pencolor('red') #设置画笔的颜色 turtle.pensize(1) #设置画笔的粗细 turtle.speed(2) #设置画笔的速度 def polygon(m, n): for i in range(n): turtle.forward(m) turtle.right(360 / n) turtle.mainloop() #让画布不消失 2.1 十边形

给函数传参

import turtle, math turtle.setup(800, 800) #设置画布 turtle.pencolor('red') #设置画笔的颜色 turtle.pensize(1) #设置画笔的粗细 turtle.speed(2) #设置画笔的速度 def polygon(m, n): for i in range(n): turtle.forward(m) turtle.right(360 / n) turtle.mainloop() #让画布不消失 polygon(100,10)

在这里插入图片描述

2.2 圆

给函数传参

import turtle, math turtle.setup(800, 800) #设置画布 turtle.pencolor('red') #设置画笔的颜色 turtle.pensize(1) #设置画笔的粗细 turtle.speed(2) #设置画笔的速度 def polygon(m, n): for i in range(n): turtle.forward(m) turtle.right(360 / n) turtle.mainloop() #让画布不消失 polygon(1,666)

在这里插入图片描述

2.3 五角星

只要把代码稍微变动下,就可以画一个五角星了,当角的个数为奇数时,都可以实现,当角的个数为偶数时,要分成多个三角形来画,下面这个代码并不适合。

import turtle, math turtle.setup(800, 800) turtle.pencolor('red') turtle.pensize(1) turtle.speed(2) def five_star(m, n): for i in range(n): turtle.forward(m) turtle.right(180-180/n) turtle.mainloop() five_star(100,5)

在这里插入图片描述

3. 椭圆和多边形

椭圆的参数方程为:x=acos(j),y=bsin(j)
a为长半轴长度,b为短半轴长度,n为边的数目,这样就能画出扁的n边形了,当n足够大时,扁的多边形就变成了椭圆,当a==b时,画出的多边形为正多边形,a和b的值越接近,椭圆就越圆。

import turtle, math turtle.setup(800, 800) turtle.pensize(1) turtle.pencolor('red') turtle.speed(3) def ellipse(a,b,n): turtle.penup() turtle.setpos(a , 0) # 初始点的位置 turtle.pendown() for i in range(n): radian = 2 * math.pi / n # 将2pai分成n份 x = radian * (i + 1) # 每次弧度增加radian next_point = (a * math.cos(x), b * math.sin(x)) turtle.setpos(next_point) turtle.mainloop() 3.1 六边形

给函数传参

import turtle, math turtle.setup(800, 800) turtle.pensize(1) turtle.pencolor('red') turtle.speed(3) def ellipse(a,b,n): turtle.penup() turtle.setpos(a , 0) # 初始点的位置 turtle.pendown() for i in range(n): radian = 2 * math.pi / n # 将2pai分成n份 x = radian * (i + 1) # 每次弧度增加radian next_point = (a * math.cos(x), b * math.sin(x)) turtle.setpos(next_point) turtle.mainloop() ellipse(200,100,10)

在这里插入图片描述

3.2 椭圆

给函数传参

import turtle, math turtle.setup(800, 800) turtle.pensize(1) turtle.pencolor('red') turtle.speed(3) def ellipse(a,b,n): turtle.penup() turtle.setpos(a , 0) # 初始点的位置 turtle.pendown() for i in range(n): radian = 2 * math.pi / n # 将2pai分成n份 x = radian * (i + 1) # 每次弧度增加radian next_point = (a * math.cos(x), b * math.sin(x)) turtle.setpos(next_point) turtle.mainloop() ellipse(200,100,666)

在这里插入图片描述

3.3 旋转和移动椭圆

如果想将椭圆旋转和左右移动,只要把代码稍加改动就行了。想要实现椭圆的旋转,最重要的就是要了解椭圆旋转之后的参数方程,然后将新点的坐标代替旧点的坐标就可以了。
原椭圆的参数方程为:x=acos(j),y=bsin(j)
旋转i弧度之后的参数方程为:x=acos(j)cos(i)-bsin(j)sin(i), y=acos(j)sin(i)+bsin(j)cos(i)
代码如下:

import turtle, math turtle.setup(800, 800) turtle.pensize(1) turtle.pencolor('red') turtle.speed(3) def new_ellipse(a, b, n, c=0, d=0, m=360, t=1): ''' :param a: 长半轴长度 :param b: 短半轴长度 :param n: 点的个数,点的个数越多,越趋近于椭圆 :param c: 椭圆往右移动的距离 :param d: 椭圆往上移动的距离 :param m: 椭圆旋转的角度 :param t: 椭圆的个数,包括原来的椭圆,最多只能有180/m个椭圆,后面的就重合了 ''' for angle in range(0, m * t, m): y = angle / 180 * math.pi # 旋转角转化成弧度 turtle.penup() turtle.setpos(a * math.cos(y) + c, a * math.sin(y) + d) # 初始点的位置 turtle.pendown() for i in range(n): radian = 2 * math.pi / n # 将2pi弧度分成n份 x = radian * (i + 1) # 每次弧度增加radian next_point = (a * math.cos(x), b * math.sin(x)) # 旋转之前的点 new_point = (next_point[0] * math.cos(y) - next_point[1] * math.sin(y) + c, next_point[0] * math.sin(y) + next_point[1] * math.cos(y) + d) turtle.setpos(new_point) turtle.mainloop() if __name__ == '__main__': new_ellipse(200, 50, 666, c=150, d=150, m=30, t=5)

在这里插入图片描述如果不需要移动和旋转,缺省参数默认值就可以了。


作者:杨是杨柳的柳



五角 turtle 椭圆

需要 登录 后方可回复, 如果你还没有账号请 注册新账号