当前位置: 首页 > news >正文

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

在这里插入图片描述
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 mathpygame.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=0ci=0
zx=0
zy=0
zhongxina=0
zhongxinb=0
zhongxinc=0img=pygame.image.load("1.png").convert_alpha()
def draw_triangle(vertices):#points = [rotate_point(vertex, angle) for vertex in vertices]global ciglobal axglobal ayglobal bxglobal byglobal cxglobal cypoints = []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 = Trueif event.type == pygame.KEYUP:f = Falseif f==True:suofang=suofang-10draw_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 = wzy = h# 重心坐标在求出中心后就不需要了,后面需要用这个坐标来判断屏幕中每个像素是否在三角形内#print(zx,zy)za1 = -(zx - bx) * (cy - by) + (zy - by) * (cx - bx)za2 = -(ax - bx) * (cy - by) + (ay - by) * (cx - bx)zhongxina = za1 / za2zb1 = -(zx - cx) * (ay - cy) + (zy - cy) * (ax - cx)zb2 = -(bx - cx) * (ay - cy) + (by - cy) * (ax - cx)zhongxinb = zb1 / zb2zhongxinc = 1 - zhongxina - zhongxinbif (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()

相关文章:

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

texture_x int(alpha * texture_image.get_width()) texture_y int(beta * texture_image.get_height())为什么没有gama 2024/3/30 15:45:52 在使用重心坐标进行纹理映射时&#xff0c;通常是通过计算 alpha 和 beta 来确定纹理图片上的对应位置&#xff0c;而 gamma 通常是…...

Leetcode 611. 有效三角形的个数

给定一个包含非负整数的数组 nums &#xff0c;返回其中可以组成三角形三条边的三元组个数。 示例 1: 输入: nums [2,2,3,4] 输出: 3 解释:有效的组合是: 2,3,4 (使用第一个 2) 2,3,4 (使用第二个 2) 2,2,3 示例 2: 输入: nums [4,2,3,4] 输出: 4 提示: 1 < nums.len…...

Openfeign

Openfeign 相关扩展 在 2020 以前的 SpringCloud 采用 Ribbon 作为负载均衡&#xff0c;但是 2020 年之后&#xff0c;SpringCloud 吧 Ribbon 移除了&#xff0c;而是使用自己编写的 LoadBalancer 替代. 因此&#xff0c;如果在没有加入 LoadBalancer 依赖的情况下&#xff0c…...

五、基于KubeAdm搭建多节点K8S集群

如需查阅上一步骤,请点击下面链接:四、戴尔R630本地服务器Linux Centos7.9系统安装docker-ce-20.10.10-3.el7版本-CSDN博客文章浏览阅读727次,点赞12次,收藏13次。1、准备工作3、Linux Centos7.9系统的iDRAC远程管理、网络设置、SecureCRT远程登录终端、企业级静态ip地址配…...

PC电脑技巧[笔记本通过网线访问设备CMW500]

笔记本局域网访问设备 现在我有一台CMW500,我要用笔记本去访问它,但是我发现没有路由器就是不能够访问,通过网线连接设备就是ping不通: 这里设置TCP/IPv4的IP地址如下,这时候就可以pin通了:...

【接口自动化测试框架】YAML管理接口框架配置的最佳实践

管理接口框架配置是构建强大的接口测试框架的关键一环。良好的配置管理可以提高测试效率、可维护性和可扩展性。在本文中&#xff0c;我们将重点介绍使用YAML&#xff08;YAML Ain’t Markup Language&#xff09;来管理接口框架配置的最佳实践&#xff0c;并通过实例演示其用法…...

【进程OI】基本文件操作的系统调用

文章目录 前言open参数flags参数mode writereadclose 前言 当用户想要向磁盘中的文件读写数据&#xff0c;就必须要得到操作系统的允许。同样&#xff0c;操作系统为了能让用户去对文件进行打开、读写、关闭等操作&#xff0c;向上提供了相应的系统调用的接口。C、JAVA、C等语…...

Ubuntu20.04 server系统部署安装(VMware上)和初始化配置

Ubuntu20.04 server部署安装&#xff08;VMware上&#xff09;和初始化配置 一、Ubuntu20.04 server系统部署安装上下键控制上下&#xff0c;可以选择配置的目标&#xff0c;回车表示确定&#xff0c;并进行下一步1.1镜像下载2.1 VMware上创建虚拟机2.2 选择语言&#xff0c;键…...

图论最短路径以及floyd算法的MATLAB实现

图论是数学的一个分支&#xff0c;起源于18世纪。1736年&#xff0c;数学家欧拉通过解决“哥尼斯堡七桥问题”&#xff0c;将问题抽象成点和线的关系&#xff0c;并通过理论分析得出结论&#xff0c;这个过程标志着图论的产生&#xff0c;欧拉也因此被称为“图论之父”。图论研…...

微信小程序 - 登录功能实现

一、认证流程 1. 小程序调用wx.login获取登录认证需要的code&#xff0c;并请求开发者服务器。 2. 开发者服务器根据code&#xff0c;appid, appsecret请求微信接口t获取 openid与session_key &#xff0c;并生成自己的认证token&#xff0c;并返回给小程序。 3.小程序请求开…...

Python连接MySQL

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 一、整体思路二、连接流程三、表结构及代码实现 一、整体思路 二、连接流程 三、表结构及代码实现 代码块如下&#xff1a; import pymysqlcon pymysql.connect(h…...

水泊梁山108小酒坛之呼保义宋江

宋江【绰号呼保义、及时雨】字公明&#xff0c;是古典名著《水浒传》中的角色。原为山东郓城县押司&#xff0c;他和晁盖互通往来的事被阎婆惜发现&#xff0c;因此怒杀阎婆惜&#xff0c;逃回家隐藏。后前往清风寨投靠花荣&#xff0c;却被清风寨观灯时遭知寨刘高之妻陷害入狱…...

java.lang.ClassNotFoundException: javafx.application.Application

java8&#xff08;jdk1.8&#xff09;到java10&#xff08;jdk10&#xff09;中内含有JavaFx 在java11&#xff08;jdk11&#xff09;以及以后的版本中剥离出来需要开发者独立下载&#xff0c;另行导入download https://gluonhq.com/products/javafx/java --module-path $FX-P…...

腾讯 tendis 替代 redis linux安装使用

下载地址 Tendis存储版 点击下载 linux 解压 tar -zxvf 安装包.tgz cd 解压安装包/scripts 启动 ./start.sh 停止 ./stop.sh 详细配置 修改 /scripts tendisplus.conf # tendisplus configuration for testing # 绑定本机IIP bind 192.168.31.112 port 51002 #设…...

k8s调优--来自gpt

Kubernetes&#xff08;K8s&#xff09;性能调优是一个涉及多个方面的过程&#xff0c;旨在提高集群的效率和响应速度。这包括对节点、Pod、服务、网络和存储等多个层面进行调优。下面我将概述一些常见的Kubernetes性能调优方法&#xff1a; 节点级别的调优: 1.资源分配&…...

HTML5+CSS3小实例:旋转中的视差效果

实例:旋转中的视差效果 技术栈:HTML+CSS 效果: 源码: 【HTML】 <!DOCTYPE html> <html lang="zh-CN"> <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scal…...

3-zookeeper之ZAB协议

Zookeeper ZAB协议 概述 ZAB(Zookeeper Automic Broadcast)是一套专门为Zookeeper设计的用于进行原子广播和崩溃恢复的协议ZAB协议主要包含了两个功能 原子广播&#xff1a;保证数据一致性崩溃恢复&#xff1a;保证集群的高可用 ZAB协议本身是基于2PC算法来进行的设计&#…...

如何为企业策划一场XR虚拟直播?

活动年年办&#xff0c;都是老一套&#xff0c;想玩点新花样&#xff1f; 预算有限&#xff0c;但还是想把活动办的逼格高一点&#xff1f; 想通过活动&#xff0c;让更多的人知道自己企业的品牌&#xff1f; 随着AIGC技术的不断演变&#xff0c;企业活动的形式和内容也在不…...

6.3物联网RK3399项目开发实录-驱动开发之I2C 使用(wulianjishu666)

物联网开发源码案例集&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1kfPDpYZpm_G0GBLAup3KTQ?pwdvgvv I2C 使用 简介 AIO-3399J 开发板上有 9 个片上 I2C 控制器&#xff0c;各个 I2C 的使用情况如下表&#xff1a; 本文主要描述如何在该开发板上配置 I2C。 配置…...

HarmonyOS实战开发-如何构建多种样式弹窗

介绍 本篇Codelab将介绍如何使用弹窗功能&#xff0c;实现四种类型弹窗。分别是&#xff1a;警告弹窗、自定义弹窗、日期滑动选择器弹窗、文本滑动选择器弹窗。需要完成以下功能&#xff1a; 点击左上角返回按钮展示警告弹窗。点击出生日期展示日期滑动选择器弹窗。点击性别展…...

Flask RESTful 示例

目录 1. 环境准备2. 安装依赖3. 修改main.py4. 运行应用5. API使用示例获取所有任务获取单个任务创建新任务更新任务删除任务 中文乱码问题&#xff1a; 下面创建一个简单的Flask RESTful API示例。首先&#xff0c;我们需要创建环境&#xff0c;安装必要的依赖&#xff0c;然后…...

css实现圆环展示百分比,根据值动态展示所占比例

代码如下 <view class""><view class"circle-chart"><view v-if"!!num" class"pie-item" :style"{background: conic-gradient(var(--one-color) 0%,#E9E6F1 ${num}%),}"></view><view v-else …...

逻辑回归:给不确定性划界的分类大师

想象你是一名医生。面对患者的检查报告&#xff08;肿瘤大小、血液指标&#xff09;&#xff0c;你需要做出一个**决定性判断**&#xff1a;恶性还是良性&#xff1f;这种“非黑即白”的抉择&#xff0c;正是**逻辑回归&#xff08;Logistic Regression&#xff09;** 的战场&a…...

uni-app学习笔记二十二---使用vite.config.js全局导入常用依赖

在前面的练习中&#xff0c;每个页面需要使用ref&#xff0c;onShow等生命周期钩子函数时都需要像下面这样导入 import {onMounted, ref} from "vue" 如果不想每个页面都导入&#xff0c;需要使用node.js命令npm安装unplugin-auto-import npm install unplugin-au…...

Qt Widget类解析与代码注释

#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this); }Widget::~Widget() {delete ui; }//解释这串代码&#xff0c;写上注释 当然可以&#xff01;这段代码是 Qt …...

css的定位(position)详解:相对定位 绝对定位 固定定位

在 CSS 中&#xff0c;元素的定位通过 position 属性控制&#xff0c;共有 5 种定位模式&#xff1a;static&#xff08;静态定位&#xff09;、relative&#xff08;相对定位&#xff09;、absolute&#xff08;绝对定位&#xff09;、fixed&#xff08;固定定位&#xff09;和…...

C++八股 —— 单例模式

文章目录 1. 基本概念2. 设计要点3. 实现方式4. 详解懒汉模式 1. 基本概念 线程安全&#xff08;Thread Safety&#xff09; 线程安全是指在多线程环境下&#xff0c;某个函数、类或代码片段能够被多个线程同时调用时&#xff0c;仍能保证数据的一致性和逻辑的正确性&#xf…...

ABAP设计模式之---“简单设计原则(Simple Design)”

“Simple Design”&#xff08;简单设计&#xff09;是软件开发中的一个重要理念&#xff0c;倡导以最简单的方式实现软件功能&#xff0c;以确保代码清晰易懂、易维护&#xff0c;并在项目需求变化时能够快速适应。 其核心目标是避免复杂和过度设计&#xff0c;遵循“让事情保…...

Proxmox Mail Gateway安装指南:从零开始配置高效邮件过滤系统

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐&#xff1a;「storms…...

【Linux】自动化构建-Make/Makefile

前言 上文我们讲到了Linux中的编译器gcc/g 【Linux】编译器gcc/g及其库的详细介绍-CSDN博客 本来我们将一个对于编译来说很重要的工具&#xff1a;make/makfile 1.背景 在一个工程中源文件不计其数&#xff0c;其按类型、功能、模块分别放在若干个目录中&#xff0c;mak…...