pygame用自己的函数 扫描线根据重心坐标填充三角形

文章介绍了如何在pygame中改进三角形填充算法,通过计算重心坐标并利用直线方程减少像素遍历,提高填充效率,确保只填充三角形内的像素。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在这里插入图片描述
其实就是在扫描线填充三角形的基础上,对三个顶点的xy坐标计算三角形重心坐标,然后在填充时,原来三角形重心坐标填充是遍历整个屏幕像素,然后判断是否在在三角形内,变成根据直线方程计算x起点与y起点,然后将需要求重心坐标的点zx,zy,从遍历屏幕像素的点xy,换成扫描线起始点xy

    for gao in range(280):

        xz1 = (jz - (gao+by)) / zk
        sx = abs(xz1)
        xy1 = (jy - (gao+by)) / yk
        ex = abs(xy1)+2#加2是为了填补空白
        xcishu=ex-sx
        #print("gao==",gao,"第一次循环",int(sx),int(ex))
        for i in range(int(xcishu)):
            #print("i==",i,"第二次循环",int(sx),int(ex))
            zx = int(sx)+i
            zy = gao+by

将原来的
#pygame.Surface.set_at(screen, (int(sx)+i , by+gao), (255, 0, 0))
换成
if (0 < zhongxina < 1 and 0 < zhongxinb < 1 and 0 < zhongxinc < 1): pygame.Surface.set_at(screen, (int(sx)+i, int(gao+by)),(int(255 * zhongxina), int(255 * zhongxinb), int(255 * zhongxinc)))
加by是因为
for gao in range(280):
280是三角形上顶点与下边之间的高度,还需要加上上顶点的y才能填充580这个高度的三角形,不然出现两个三角形

import pygame
import sys
from pygame import gfxdraw

(width, height) = (600, 600)
pygame.init()
screen = pygame.display.set_mode((width, height))
image = pygame.image.load("1.png").convert_alpha()
masked_result = image.copy()

white_color = (0, 0, 0)
polygon =[(0, 0), (800, 600), (0, 600)]
#(260,0),(200,0),(200,130),(260,130)

#[(0.0, 307.6923076923077), (
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值