pygame画点线方法详解

目录
  • 一、复习
  • 二、画单个像素
  • 三、连接多个点
    • 1.连接程序生成的点
    • 2.连接外部给定的点
  • 四、逐点绘制

一、复习

首先将上次画的矩形做复杂一些的小程序:

import pygame,sys, random
pygame.init()
screen = pygame.display.set_mode([640, 480])
screen.fill([255, 255, 255])
for i in range(100):
    width = random.randint(0, 250)
    height = random.randint(0, 100)
    top = random.randint(0, 400)
    left = random.randint(0, 500)
    pygame.draw.rect(screen, [0, 0, 0], [left, top, width, height], 1)
    pygame.display.flip()
while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            sys.exit()

在此基础上还可以增加矩形的宽度和颜色:

import pygame,sys, random
pygame.init()
screen = pygame.display.set_mode([640, 480])
screen.fill([255, 255, 255])
for i in range(100):
    r = random.randint(0, 255)
    g = random.randint(0, 255)
    b = random.randint(0, 255)
    rect_width = random.randint(1, 5)
    width = random.randint(0, 250)
    height = random.randint(0, 100)
    top = random.randint(0, 400)
    left = random.randint(0, 500)
    pygame.draw.rect(screen, [r, g, b], [left, top, width, height], rect_width)
    pygame.display.flip()
while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            sys.exit()

实现的效果如下:

二、画单个像素

单个像素在pygame中就是画一个宽高为1的矩形。

代码示例:

import pygame, sys
import math
pygame.init()
screen = pygame.display.set_mode([640, 480])
screen.fill([255, 255, 255])
for x in range(0, 640):
    y = int(math.sin(x/640*math.pi*4)*200 + 240)
    pygame.draw.rect(screen, [0, 0, 0], [x, y, 1, 1], 1)
pygame.display.flip()
while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            sys.exit()

效果图:

需要注意的是,矩形的线宽须是1,而不是平常写的为0,这是因为矩形太小了,没有中间部分可以填充。

三、连接多个点

二中画的曲线,如果仔细看就会发现中间不是连续的,点与点之前存在间隙。这是因为在比较陡峭的地方,x每变动1个值,y就要变动2个或更多的值,因此出现缝隙。

我们可以用画线的方式把各个点连接起来,这样就不会有间隙了:

首先来看画线函数:

发现此函数与draw.rect相比,只是参数plotPoints略有不同

1.连接程序生成的点

上关键代码:

plotPoints = []
for x in range(0, 640):
    y = int(math.sin(x/640*math.pi*4)*200+240)
    plotPoints.append([x, y])
pygame.draw.lines(screen, [0, 0, 0], False, plotPoints, 1)

由于plotPoints是一个数组,因此我们需要先根据x值计算出所有的y值,然后将x,y成队的加入到数组plotPoints中,最后再通过lines一次性画出整个曲线来

效果图如下:

2.连接外部给定的点

import pygame, sys
from data import dots
pygame.init()
screen = pygame.display.set_mode([640, 480])
screen.fill([255, 255, 255])
pygame.draw.lines(screen, [0, 0, 0], True, dots, 2)
pygame.display.flip()
while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            sys.exit()
dots = [
    [221, 432], [225, 331], [133, 342], [141, 310],
    [51, 230], [74, 217], [58, 153], [114, 164],
    [123, 135], [176, 190], [159, 77], [193, 93],
    [230, 28], [267, 93], [301, 77], [284, 190],
    [327, 135], [336, 164], [402, 153], [386, 217],
    [409, 230], [319, 310], [327, 342], [233, 331],
    [237, 432]
]

生成的效果图:

四、逐点绘制

如果我们只是想改变某些像素的颜色,用draw.rect通过小矩形来做就有点浪费资源,可以用screen.set_at([x, y], [0, 0, 0])来实现相同的效果

示例代码:

import pygame, sys, math
pygame.init()
screen = pygame.display.set_mode([640, 480])
screen.fill([255, 255, 255])
for x in range(640):
    y = math.sin(x/640*math.pi*4) * 200 + 240
    screen.set_at([int(x), int(y)], [0, 0, 0])
pygame.display.flip()
while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            sys.exit()

效果图:

到此这篇关于pygame画点线方法详解的文章就介绍到这了,更多相关pygame画点线内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • pygame实现方块动画实例讲解

    导入组件 首先导入需要的组件,pygame游戏组件,time是时间组件 import pygame, time, sys from pygame.locals import * 绘制窗口 这里定义了一个480*600的屏幕,设置了窗口标题,并设置了屏幕的填充颜色为白色 # 屏幕的宽高 WIDTH = 480 HEIGHT = 600 # 颜色的常量 WHITE = (255, 255, 255) surface = pygame.display.set_mode((WIDTH, HEIGHT),

  • 基于Python Pygame实现的画饼图游戏

    目录 导入包 配置基本参数 根据输入的数字改变扇形的个数 监听事件 这个游戏就是实现键盘上输入不同的数字,将圆分割成不同的几个部分,每部分用不同的颜色来实现. 导入包 导入随机包,pygame,系统包,time时间包用于时间暂停.math是用来确认弧度的. import random import pygame, sys, time import math from pygame.locals import * 配置基本参数 初始化pygame,设置窗口大小标题,设置圆心的x和y轴,圆的半径,线

  • pygame画点线方法详解

    目录 一.复习 二.画单个像素 三.连接多个点 1.连接程序生成的点 2.连接外部给定的点 四.逐点绘制 一.复习 首先将上次画的矩形做复杂一些的小程序: import pygame,sys, random pygame.init() screen = pygame.display.set_mode([640, 480]) screen.fill([255, 255, 255]) for i in range(100): width = random.randint(0, 250) height

  • 对python pandas 画移动平均线的方法详解

    数据文件 66001_.txt 内容格式: date,jz0,jz1,jz2,jz3,jz4,jz5 2012-12-28,0.9326,0.8835,1.0289,1.0027,1.1067,1.0023 2012-12-31,0.9435,0.8945,1.0435,1.0031,1.1229,1.0027 2013-01-04,0.9403,0.8898,1.0385,1.0032,1.1183,1.0030 ... ... pd_roll_mean1.py # -*- coding: u

  • Python+OpenCV实现鼠标画瞄准星的方法详解

    目录 函数说明 cv2.circle() cv2.line() 简单的例子 利用鼠标回调函数画瞄准星 所谓瞄准星指的是一个圆圈加一个圆圈内的十字线,就像玩射击游戏狙击枪开镜的样子一样.这里并不是直接在图上画一个瞄准星,而是让这个瞄准星跟着鼠标走.在图像标注任务中,可以利用瞄准星进行一些辅助,特别是回归类的任务,使用该功能可以使得关键点的标注更加精准. 关于鼠标回调函数的说明可以参考:opencv-python的鼠标交互操作 函数说明 import cv2后,可以分别help(cv2.circle

  • D3.js实现折线图的方法详解

    前言 D3.js是一个帮助开发者操纵基于数据的文档的JavaScript类库,在<D3.js实现柱状图的方法详解>中已经给大家介绍过如何用D3.js来实现一个简单的柱状图了,今天我们来学习用D3.js来实现折线图,感兴趣的朋友们下面来一起看看吧. 折线图由坐标轴.线条和点组成.和实现柱状图一样,我们还是先把大概的画图框架搭起来,代码如下(别忘了添加D3.js): <!DOCTYPE html> <html lang="en"> <head>

  • C#绘制实时曲线图的方法详解

    在终端机器上的曲线显示本打算用控件,可控件折腾好长时间也没弄顺,还是自己写的好使,记录下来后面再改进. //绘图部分的定义 Int32 Draw_Top;//绘画Y起点 Int32 Draw_Left;//绘画X起点 Int32 Draw_EdgeWidth;//X边缘宽度 Int32 Draw_EdgeHeight;//Y边缘高度 Int32 Draw_RangeWidth;//绘画范围宽度 Int32 Draw_RangeHeight;//绘画范围高度 Double[] XTDYData =

  • Python生成图文并茂的PDF报告的方法详解

    目录 安装第三方库 模块导入 封装不同内容对应的函数 生成报告 reportlab是Python的一个标准库,可以画图.画表格.编辑文字,最后可以输出PDF格式.它的逻辑和编辑一个word文档或者PPT很像.有两种方法: 1)建立一个空白文档,然后在上面写文字.画图等: 2)建立一个空白list,以填充表格的形式插入各种文本框.图片等,最后生成PDF文档. 因为需要产生一份给用户看的报告,里面需要插入图片.表格等,所以采用的是第二种方法. 安装第三方库 reportlab输入Python的第三方

  • WPF实现绘制统计图(柱状图)的方法详解

    目录 前言 实现代码 效果预览 前言 有小伙伴提出需要实现统计图. 由于在WPF中没有现成的统计图控件,所以我们自己实现一个. PS:有更好的方式欢迎推荐. 实现代码 一.创建 BasicBarChart.cs 继承 Control代码如下. BasicBarChart.cs实现思路如下 1.SeriesArray :存放展示集合 . 2.重写OnRender . 3.先绘制X轴线. 4.调用GetFormattedText()绘制底部类别. 5.调用GetFormattedText()绘制左侧

  • D3.js实现散点图和气泡图的方法详解

    前言 小编之前已经跟大家分享过了<D3.js实现柱状图的方法详解>和<D3.js实现折线图的方法详解>这两篇文章,已经介绍过柱状图和折线图了.下面就来说说和这两种非常相似的图表--散点图和气泡图.有需要的朋友们可以参考学习. 散点图和气泡图的实现 还是和之前一样,我们先把简单的画图框架搭起来,添加SVG画布: <!DOCTYPE html> <html lang="en"> <head> <meta charset=&q

  • java 中enum的使用方法详解

    java 中enum的使用方法详解 enum 的全称为 enumeration, 是 JDK 1.5 中引入的新特性,存放在 java.lang 包中. 下面是我在使用 enum 过程中的一些经验和总结. 原始的接口定义常量 public interface IConstants { String MON = "Mon"; String TUE = "Tue"; String WED = "Wed"; String THU = "Thu

  • IOS 开发中画扇形图实例详解

    IOS 开发中画扇形图实例详解 昨天在做项目中,遇到一个需要显示扇形图的功能,网上搜了一下,发现code4app里面也没有找到我想要的那种类似的效果,没办法了,只能自己学习一下如何画了. 首先我们需要了解一个uiview的方法 -(void)drawRect:(CGRect)rect 我们知道了这个方法,就可以在自定义UIView的子类的- (void)drawRect:(CGRect)rect里面绘图了,关于drawrect的调用周期,网上也是一找一大堆,等下我会整理一下,转载一篇供你们参考.

随机推荐