Python 用大量小矩形来画曲线

Posted on 2020-10-11 16:14  黑炽  阅读(238)  评论(0编辑  收藏  举报
 1 import sys, pygame, math
 2 
 3 pygame.init()
 4 screen = pygame.display.set_mode([640, 480])
 5 
 6 screen.fill([255, 255, 255])
 7 for x in range(0, 640):
 8     y = int(math.sin(x / 640.0 * 4 * math.pi) * 200 + 240)#y坐标
 9     pygame.draw.rect(screen, [0, 0, 0], [x, y, 1, 1], 1)#小矩形来画sinx
10 
11 pygame.display.flip()
12 running = True
13 while running:
14     for event in pygame.event.get():
15         if event.type == pygame.QUIT:
16             running = False
17 pygame.quit()

如果线宽用0的话,什么都不会显示,因为这样的小矩形没有'中间部分' 来填充

 

可以看到,上面的图是一个一个的点,点中间还存在空格,这是因为,在比较陡的地方,我们必须上移3个像素而向右只移动一个像素,而且我们画的是点,不是线

下面是连接多个点的方法:

 1 import sys, pygame, math
 2 
 3 pygame.init()
 4 screen = pygame.display.set_mode([640, 480])
 5 plotPoint = []
 6 
 7 screen.fill([255, 255, 255])
 8 for x in range(0, 640):
 9     y = int(math.sin(x / 640.0 * 4 * math.pi) * 200 + 240)#y坐标
10     plotPoint.append([x, y])
11     
12 pygame.draw.lines(screen, [0, 0, 0], False, plotPoint, 1)
13 '''这里的五个参数作用:
14 第一:画线的表面
15 第二:颜色
16 第三:是否要画一条线将最后一个点与第一个点相连接,使形状闭合。
17 我们不希望正弦曲线闭合,所以参数为False
18 第四:要连接的点的列表
19 第五:线宽
20 '''
21 pygame.display.flip()
22 running = True
23 while running:
24     for event in pygame.event.get():
25         if event.type == pygame.QUIT:
26             running = False
27 pygame.quit()