pygame通过重心坐标 用纹理填充三角形

news2024/12/28 20:24:04

在这里插入图片描述
texture_x = int(alpha * texture_image.get_width())
texture_y = int(beta * texture_image.get_height())为什么没有gama

2024/3/30 15:45:52

在使用重心坐标进行纹理映射时,通常是通过计算 alpha 和 beta 来确定纹理图片上的对应位置,而 gamma 通常是通过 alpha 和 beta 相互关系来计算的,因为重心坐标满足 alpha + beta + gamma = 1。因此,通常情况下不需要单独计算 gamma,因为它可以通过 alpha 和 beta 推导得到,从而减少了计算的复杂性和冗余。

import pygame
from pygame.locals import *
import sys
import math

pygame.init()

width, height = 800, 600
screen = pygame.display.set_mode((width, height))

vertices = [(160, 300, 1), (400, 40, 1), (600, 300, 1)]

angle = 0
rotation_speed = 2  # 可根据需要调整旋转速度
c=pygame.time.Clock()
f=False
suofang=100
ax=0
ay=0
bx=0
by=0
cx=0
cy=0

ci=0
zx=0
zy=0
zhongxina=0
zhongxinb=0
zhongxinc=0

img=pygame.image.load("1.png").convert_alpha()
def draw_triangle(vertices):
    #points = [rotate_point(vertex, angle) for vertex in vertices]
    global ci
    global ax
    global ay
    global bx
    global by
    global cx
    global cy
    points = []
    new_vertices = []
    for x, y, z in vertices:
        new_x = x * math.cos(math.radians(angle)) - z * math.sin(math.radians(angle))
        new_z = x * math.sin(math.radians(angle)) + z * math.sin(math.radians(angle))
        new_vertices.append((new_x, y, new_z))
    (ax, ay, az), (bx, by, bz), (cx, cy, cz) = new_vertices

        #print(p,';;')
    # 绘制多边形
    #pygame.draw.polygon(screen, (200, 200, 200), transformed_points)
    #print(transformed_points)


while True:
    screen.fill((255, 255, 255))
    #c.tick(7)
    for event in pygame.event.get():
        if event.type == QUIT:
            pygame.quit()
            sys.exit()
        keys = pygame.key.get_pressed()
        if keys[pygame.K_UP]:
            f = True

        if event.type == pygame.KEYUP:
            f = False
    if f==True:
        suofang=suofang-10
    draw_triangle(vertices)
    #angle += rotation_speed
    #print("....","ax",ax ,"ay",ay,"bx",bx,"by",by,"cx",cx,"cy",cy)
    for h in range(600):
        for w in range(600):
            zx = w
            zy = h
            # 重心坐标在求出中心后就不需要了,后面需要用这个坐标来判断屏幕中每个像素是否在三角形内
            #print(zx,zy)

            za1 = -(zx - bx) * (cy - by) + (zy - by) * (cx - bx)
            za2 = -(ax - bx) * (cy - by) + (ay - by) * (cx - bx)
            zhongxina = za1 / za2

            zb1 = -(zx - cx) * (ay - cy) + (zy - cy) * (ax - cx)
            zb2 = -(bx - cx) * (ay - cy) + (by - cy) * (ax - cx)
            zhongxinb = zb1 / zb2

            zhongxinc = 1 - zhongxina - zhongxinb
            if (0<zhongxina<1 and 0<zhongxinb<1 and 0<zhongxinc<1):
                #print(h,w)
                pygame.Surface.set_at(screen, (int(w), int(h)),
                                      (img.get_at((int(zhongxina*img.get_width()),int((zhongxinb*img.get_height()))))))#(img.get_at((int(i/10),int(gao/10)))))

    # zx =(ax + bx + cx) / 3
    # zy =(ay + by + cy) / 3
    # #重心坐标在求出中心后就不需要了,后面需要用这个坐标来判断屏幕中每个像素是否在三角形内
    #
    # '''
    # x,y=500  abc三点不满足大于0小于1
    # -0.7076923076923077
    # 1.3282051282051281
    # 0.3794871794871797
    # 1.0
    #
    # x,y=143 都满足大于0小于1,在三角形内
    # 0.94 0.04666666666666667 0.013333333333333384 1.0
    #
    # x,y=300 都满足,在三角形内
    # 0.2153846153846154 0.6102564102564103 0.1743589743589743 1.0
    #
    # x,y=0 不满足,不在三角形内
    # 1.6 -0.4666666666666667 -0.13333333333333341 0.9999999999999999
    #
    # x=770,y=143 不满足 不在三角形内
    # -0.6676923076923077 -1.0251282051282051 2.692820512820513 1.0
    #
    #  x=230,y=190满足,在
    #  0.6205128205128205 0.147008547008547 0.23247863247863246 1.0
    # '''
    # za1=-(zx-bx)*(cy-by)+(zy-by)*(cx-bx)
    # za2=-(ax-bx)*(cy-by)+(ay-by)*(cx-bx)
    # zhongxina=za1/za2
    #
    # zb1=-(zx-cx)*(ay-cy)+(zy-cy)*(ax-cx)
    # zb2=-(bx-cx)*(ay-cy)+(by-cy)*(ax-cx)
    # zhongxinb=zb1/zb2
    #
    # zhongxinc=1-zhongxina-zhongxinb
    #print(zhongxina,zhongxinb,zhongxinc,zhongxina+zhongxinb+zhongxinc,"zx,",zx,"zy",zy)
    pygame.Surface.set_at(screen, (int(zx), int(zy)),
                          (190, 90, 90))
    pygame.display.flip()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1559503.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【QT学习】2.补充:connect中的lambda表达式

一.简单实例&#xff1a; 1.实例要求 点击按钮&#xff0c;实现 >o<与#-#的转换。 2.步骤 补充&#xff1a;​​​​​​​ 1.如果我想在lambda中修改数据&#xff0c;怎么办&#xff1f; 写上mutable就行。

共享办公室是否可以用来搭建直播间

共享办公室确实可以用来搭建直播间&#xff0c;这在很多创业公司和个人创作者中已经变得相当普遍。以下是一些实际可行的因素&#xff1a; 空间的私密性&#xff1a;选择一个较为封闭的空间&#xff0c;可以减少外界干扰&#xff0c;保证直播过程中的安静和专注。 良好的网络连…

鸿蒙TypeScript入门学习第4天:【TS变量声明】

1、TypeScript 变量声明 变量是一种使用方便的占位符&#xff0c;用于引用计算机内存地址。 我们可以把变量看做存储数据的容器。 TypeScript 变量的命名规则&#xff1a; 变量名称可以包含数字和字母。除了下划线 _ 和美元 $ 符号外&#xff0c;不能包含其他特殊字符&…

前端三剑客 —— CSS (第二节)

目录 内容回顾&#xff1a; CSS选择器*** 属性选择器 伪类选择器 1&#xff09;:link 超链接点击之前 2&#xff09;:visited 超链接点击之后 3&#xff09;:hover 鼠标悬停在某个标签上时 4&#xff09;:active 鼠标点击某个标签时&#xff0c;但没有松开 5&#xff09;:fo…

什么是服务雪崩?什么是服务限流?

服务雪崩效应&#xff1a;因服务提供者的不可用而导致服务调用者的不可用&#xff0c;并且这种情况不断的衍生方法&#xff0c;从而导致整个系统崩溃的过程&#xff0c;就是服务雪崩效应。 解决方式&#xff1a; 熔断机制&#xff1a;当一个服务挂了&#xff0c;被影响的服务要…

基于微信小程序的自习室预约系统的设计与实现

基于微信小程序的自习室预约系统的设计与实现 文章目录 基于微信小程序的自习室预约系统的设计与实现1、前言介绍2、功能设计3、功能实现4、开发技术简介5、系统物理架构6、系统流程图7、库表设计8、关键代码9、源码获取10、 &#x1f389;写在最后 1、前言介绍 伴随着信息技术…

Oracle 低代码平台 Apex 最新版本 23.2 安装过程

趁春节快结束前&#xff0c;安装了一把APEX &#xff0c;到目前为此&#xff0c;APEX最新版本为23.2&#xff0c;23.2和21版本有一些变化&#xff0c;只是用于验证&#xff0c;我 是使用的单独模式&#xff0c;没有安装TOMAT&#xff0c;下面列一下安装过程&#xff1a; 1.环境…

Nest安装及使用~

前提条件 请确保您的操作系统上安装了 Node.js&#xff08;版本 > 16&#xff09; &#x1f4da;要查看指南&#xff0c;请访问 https://docs.nestjs.com/ &#x1f4da;要查看中文 指南&#xff0c; 请访问 https://docs.nestjs.cn/ $ node -v v16.18.1 $ npm -v 7.x.x安…

Beans模块之工厂模块DisposableBean

博主介绍&#xff1a;✌全网粉丝5W&#xff0c;全栈开发工程师&#xff0c;从事多年软件开发&#xff0c;在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战&#xff0c;博主也曾写过优秀论文&#xff0c;查重率极低&#xff0c;在这方面有丰富的经验…

linux下minio部署和nginx配置

1 下载minio wget https://dl.min.io/server/minio/release/linux-amd64/minio chmod x minio #启动minio&#xff0c;文件数据存放在/data目录 ./minio server /data2 部署minio 下载minio后赋予可执行权限就可以运行了&#xff0c;这里我整理了遇到的坑和解决问题的最终配置…

ngrok 内网穿透使用

title: ngrok 内网穿透使用 search: 2024-02-29 文章目录 背景Windows安装ngrok指令授权ngrok个人用户Authtoken穿透 http 或 https 服务ngrok的代理http指令ngrok获得静态域名指令ngrok的代理ssh指令 背景 这次寒假回家&#xff0c;很无奈&#xff0c;很多东西放在项目组服务…

vuex插件实现数据共享

vuex插件 vuex是管理多个vue通用的数据的插件.(状态管理工具,状态是数据) 我们对于多个vue文件之间的共同数据,是用props传递,或者对于一个vue实例对象,进行绑定,传参,也是多次传参,多个文件之间,比较麻烦. 但是我们vuex会创建一个公共对象,从这个公共对象上赋值,比较简单易…

HarmonyOS 应用开发之使用隐式Want打开网址

以打开浏览器为例&#xff0c;假设设备上安装了一个或多个浏览器应用。为了使浏览器应用能够正常工作&#xff0c;需要在 module.json5配置文件 进行配置&#xff0c;具体配置如下&#xff1a; {"module": {..."abilities": [{..."skills": [{&…

Spring面试题(二)

一、老杜讲解Spring6整理 1. Spring有哪几大模块&#xff1f; 2. IoC控制反转的实现是依赖注入&#xff0c;set依赖注入的原理是什么&#xff1f; 3. 自动装配有哪几种&#xff1f;它的原理是基于构造注入还是基于set注入&#xff1f; 4. Spring容器中的Bean是单例还是多例…

Mybatis-Plus分页查询时碰到`total`有值但`records`为空

个人原因&#xff1a;Mybatis-Plus分页插件设置了maxLimit单页条数 // 分页插件配置 PaginationInnerInterceptor paginationInnerInterceptor new PaginationInnerInterceptor(DbType.MYSQL); paginationInnerInterceptor.setMaxLimit(200L); // 单页分页条数限制(默认无限…

博客页面---前端

目录 主页 HTML CSS 文章详细页面 HTML CSS 登录页面 HTML CSS 文章编辑页 HTML CSS 这只是前端的页面组成&#xff0c;还没有接入后端&#xff0c;并不是完全体 主页 HTML <!DOCTYPE html> <!-- <html lang"en"> --> <head>&…

【PSINS工具箱】基于工具箱,自己设计的轨迹,并生成IMU数据和三维视图(完整代码)

完整代码 在有工具箱的情况下&#xff0c;直接运行代码&#xff0c;即可 % 基于PSINS工具箱的三维轨迹生成、三维图像绘制与IMU数据生成 % date:2024-2-13 % Evand&#xff08;evandworldqq.com&#xff09; % Ver1 clear;clc;close all; glvs ts 0.1; % sampling int…

Redis(十九)缓存过期淘汰策略

文章目录 面试题内存满怎么办写入的数据如何删除的&#xff08;删除策略&#xff09;立即删除惰性删除上面两种方案都走极端 缓存淘汰策略配置文件LRU和LFU区别有哪些如何配置、修改 redis缓存淘汰策略配置性能建议 面试题 生产上你们的redis内存设置多少?如何配置、修改redi…

动态规划-最长回文子串

动态规划-最长回文子串 原题描述解答中心移动思想代码实现复杂度分析时间复杂度空间复杂度 动态规划思想代码实现复杂度分析时间复杂度空间复杂度 突然觉得很有必要将学过的内容记录下来&#xff0c;这样后续在需要用到的时候就可以避免从头进行学习&#xff0c;而去看自己之前…

【Threejs基础教程-光影篇】5.2 Threejs 阴影系统

5.2 Threejs阴影系统 学习ThreeJS的捷径在用光影系统之前threejs是实时光影web端目前没有优质的实时光影实时光影会大幅增加渲染压力没有独显的电脑不建议添加实时光影 阴影配置什么样的灯光可以产生阴影什么样的物体可以产生阴影和接受阴影注意开启阴影渲染灵活运用阴影 平行光…