pygame三角形重心坐标填充 沿x轴旋转

在这里插入图片描述

import pygame
from pygame.locals import *
import sys
import math# 初始化Pygame
pygame.init()# 设置窗口大小
width, height = 800, 600
screen = pygame.display.set_mode((width, height))
pygame.display.set_caption('3D Triangle Fill with Barycentric Coordinates')# 定义三角形的三个顶点坐标(包含z坐标)
v0 = (200, 100, 0)
v1 = (400, 500, 0)
v2 = (600, 200, 0)
img=pygame.image.load("11.jpg").convert_alpha()
# 定义旋转角度
angle_x = 0
angle_y = 0
angle_z = 0
rotation_speed = 0.01  # 每帧旋转的速度
def rotate_x(vertex, angle):x, y, z = vertexnew_y = y * math.cos(angle) - z * math.sin(angle)new_z = y * math.sin(angle) + z * math.cos(angle)return x, new_y, new_zdef rotate_y(vertex, angle):x, y, z = vertexnew_x = x * math.cos(angle) + z * math.sin(angle)new_z = -x * math.sin(angle) + z * math.cos(angle)return new_x, y, new_zdef rotate_z(vertex, angle):x, y, z = vertexnew_x = x * math.cos(angle) - y * math.sin(angle)new_y = x * math.sin(angle) + y * math.cos(angle)return new_x, new_y, z# 对三角形顶点进行旋转变换
def rotate_triangle():global v0, v1, v2, angle_x, angle_y, angle_zv0 = rotate_x(v0, angle_x)v1 = rotate_x(v1, angle_x)v2 = rotate_x(v2, angle_x)v0 = rotate_y(v0, angle_y)v1 = rotate_y(v1, angle_y)v2 = rotate_y(v2, angle_y)v0 = rotate_z(v0, angle_z)v1 = rotate_z(v1, angle_z)v2 = rotate_z(v2, angle_z)# 渲染三角形
def render_triangle(v0, v1, v2):for x in range(int(min(v0[0], v1[0], v2[0])), int(max(v0[0], v1[0], v2[0]))):for y in range(int(min(v0[1], v1[1], v2[1])), int(max(v0[1], v1[1], v2[1]))):u, v, w = barycentric_coordinates((x, y), v0, v1, v2)if u >= 0 and v >= 0 and w >= 0:z = u * v0[2] + v * v1[2] + w * v2[2]screen.set_at((x, y), ((int(u*255),int(v*255),int(w*255))))def barycentric_coordinates(p, v0, v1, v2):u = ((v1[1] - v2[1]) * (p[0] - v2[0]) + (v2[0] - v1[0]) * (p[1] - v2[1])) / \((v1[1] - v2[1]) * (v0[0] - v2[0]) + (v2[0] - v1[0]) * (v0[1] - v2[1]))v = ((v2[1] - v0[1]) * (p[0] - v2[0]) + (v0[0] - v2[0]) * (p[1] - v2[1])) / \((v1[1] - v2[1]) * (v0[0] - v2[0]) + (v2[0] - v1[0]) * (v0[1] - v2[1]))w = 1 - u - vreturn u, v, w# 主循环
while True: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 = False# 清空屏幕screen.fill((0, 0, 0))# 旋转三角形rotate_triangle()# 渲染并填充三角形render_triangle(v0, v1, v2)# 更新角度angle_x += rotation_speedangle_y += rotation_speedangle_z += rotation_speedpygame.display.flip()

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

spring boot3登录开发-3(2短信验证登录/注册逻辑实现)

⛰️个人主页: 蒾酒 🔥系列专栏:《spring boot实战》 🌊山高路远,行路漫漫,终有归途 目录 写在前面 上文衔接 内容简介 功能分析 短信验证登录实现 1.创建交互对象 用户短信登录/注册DTO 创建用户登录VO…

css-盒子阴影

1.box-shadow: 10px 20px 10px 10px blue; 参数对应顺序:上下,左右 ,模糊程度,颜色 ,阴影大小 2.box-shadow: 10px 20px 10px 20px blue,-10px -20px 10px 50px red; 负号就是相反方向 支持多个阴影 在后面加逗号 3…

Red Hat配置本地yum源

Red Hat配置本地yum源 创建本地源文件夹 mkdir -p /mnt/cdrom挂载镜像文件至指定的目录 mount /dev/cdrom /mnt/cdrom备份本地源 cp -rf /etc/yum.repos.d /etc/yum.repos.d_$(date %Y%m%d_%H%M%S)删除默认原本地源 rm -rf /etc/yum.repos.d/*配置本地源,创建…

网页的血液——javascript

JavaScript 基础知识概述 1. JavaScript 介绍 JavaScript 是一种高级的、解释型的编程语言,它是一种基于对象的、事件驱动的语言,它允许开发者创建动态的网页。JavaScript 是一种脚本语言,它可以嵌入到 HTML 中,或者作为外部文件…

景联文科技提供高质量医疗健康AI大模型数据

医疗行业是典型的知识和技术密集型行业,其发展水平直接关系到国民健康和生命质量。 医疗健康AI大模型,作为人工智能的一个分支,能够通过学习大量的数据来生成新的数据实例,在医药研发、医学影像、医疗文本分析等都有广泛的应用前景…

websocket 局域网 webrtc 一对一 多对多 视频通话 的示例

基本介绍 WebRTC(Web Real-Time Communications)是一项实时通讯技术,它允许网络应用或者站点,在不借助中间媒介的情况下,建立浏览器之间点对点(Peer-to-Peer)的连接,实现视频流和&am…

【详细讲解语言模型的原理、实战与评估】

🌈个人主页:程序员不想敲代码啊🌈 🏆CSDN优质创作者,CSDN实力新星,CSDN博客专家🏆 👍点赞⭐评论⭐收藏 🤝希望本文对您有所裨益,如有不足之处,欢迎在评论区提…

电脑找不到msvcr120.dll如何修复,总结5种有效的方法

当您启动计算机并尝试运行某个应用程序时,屏幕上突然弹出一条醒目的错误提示:“电脑显示msvcr120.dll丢失”。这行简短却令人困扰的信息,明确地向您传达了一个关键问题:您的操作系统在当前环境下无法找到名为“msvcr120.dll”的动…

搭建Spark单机版环境

在搭建Spark单机版环境的实战中,首先确保已经安装并配置好了JDK。然后,从群共享下载Spark安装包,并将其上传至目标主机的/opt目录。接着,解压Spark安装包至/usr/local目录,并配置Spark的环境变量,以确保系统…

是否应该升级到ChatGPT 4.0?深度对比ChatGPT 3.5与4.0的差异

如果只是想简单地体验AI的魅力,感受大模型的独特之处,或是玩一玩文字游戏,那么升级至ChatGPT 4.0可能并非必需。然而,若你期望将AI作为提升工作学习效率的得力助手,那么我强烈建议你升级到ChatGPT 4.0。 如果你不知道…

苹果开发者账号注册步骤中的常见疑问解答与技巧分享

转载:注册苹果开发者账号的方法 在2020年以前,注册苹果开发者账号后,就可以生成证书。 但2020年后,因为注册苹果开发者账号需要使用Apple Developer app注册开发者账号,所以需要缴费才能创建ios证书了。 所以新政策出…

如何避免Flutter应用混淆过程中的常见错误

在移动应用开发中,保护应用代码安全至关重要。Flutter 提供了简单易用的混淆工具,帮助开发者在构建 release 版本应用时有效保护代码。本文将介绍如何在 Flutter 应用中使用混淆,并提供了相关的操作步骤和注意事项。 📝 摘要 本…