python:pymunk + pygame 模拟六边形中小球弹跳运动

向 chat.deepseek.com 提问:编写 python 程序,用 pymunk, 有一个正六边形,围绕中心点缓慢旋转,六边形内有一个小球,六边形的6条边作为墙壁,小球受重力和摩擦力、弹力影响,模拟小球弹跳运动,小球初始位置在中心点,中心点位置不变。

以下是结合 pymunk(2D 物理引擎)和 pygame 的 Python 脚本,模拟六边形中小球的弹跳运动。

1. 安装依赖

确保你已经安装了 pymunk 和 pygame:pip install pymunk pygame

2. 示例代码 test_pymunk_6e1b.py 

# -*- coding: utf-8 -*-
""" pymunk + pygame 模拟六边形小球弹跳运动 """
import math
import pygame
import pymunk
import pymunk.pygame_util# 初始化pygame
pygame.init()# 屏幕参数
width, height = 800, 600
screen = pygame.display.set_mode((width, height))
pygame.display.set_caption("2D Hexagon Ball Simulation with Pymunk")# 初始化pymunk
space = pymunk.Space()
space.gravity = (0, 500)  # 设置重力# 绘制选项
draw_options = pymunk.pygame_util.DrawOptions(screen)# 创建六边形的静态物体
def create_hexagon(center, radius, rotation_angle=0):num_sides = 6points = []for i in range(num_sides):angle = 2 * math.pi * i / num_sides + rotation_anglex = center[0] + radius * math.cos(angle)y = center[1] + radius * math.sin(angle)points.append((x, y))# 创建六边形的边segments = []for i in range(num_sides):p1 = points[i]p2 = points[(i + 1) % num_sides]segment = pymunk.Segment(space.static_body, p1, p2, 5)segment.elasticity = 0.8  # 反弹系数segment.friction = 0.5  # 摩擦力segments.append(segment)return segments# 创建小球
def create_ball(space, position, radius, mass):moment = pymunk.moment_for_circle(mass, 0, radius)body = pymunk.Body(mass, moment)body.position = positionshape = pymunk.Circle(body, radius)shape.elasticity = 0.8  # 反弹系数shape.friction = 0.5  # 摩擦力space.add(body, shape)return body# 中心点和半径
hexagon_center = (width // 2, height // 2)
hexagon_radius = 200# 初始六边形
rotation_angle = 0  # 初始旋转角度
hexagon_segments = create_hexagon(hexagon_center, hexagon_radius, rotation_angle)
for segment in hexagon_segments:space.add(segment)# 创建小球
ball_radius = 20
ball_mass = 1
ball_position = (width // 2, height // 2 - hexagon_radius + ball_radius + 10)
ball_body = create_ball(space, ball_position, ball_radius, ball_mass)# 主循环
clock = pygame.time.Clock()
running = True
rotation_speed = 0.01  # 旋转速度
while running:for event in pygame.event.get():if event.type == pygame.QUIT:running = False# 清屏screen.fill((255, 255, 255))# 更新六边形的旋转角度rotation_angle += rotation_speedif rotation_angle >= 2 * math.pi:rotation_angle -= 2 * math.pi# 移除旧的六边形边for segment in hexagon_segments:space.remove(segment)# 创建新的六边形边hexagon_segments = create_hexagon(hexagon_center, hexagon_radius, rotation_angle)for segment in hexagon_segments:space.add(segment)# 更新物理引擎space.step(1 / 60.0)# 绘制物理空间space.debug_draw(draw_options)# 刷新屏幕pygame.display.flip()clock.tick(60)pygame.quit()

3.运行 python test_pymunk_6e1b.py 

运行脚本后,你会看到一个六边形和一个红色小球在六边形内弹跳。小球受重力影响,碰到六边形的边时会反弹。

4. 代码说明

  1. 初始化

    • 初始化 pygame 和 pymunk

    • 设置重力方向为向下((0, 500))。

  2. 创建六边形

    • 使用 pymunk.Segment 创建六边形的六条边。

    • 设置边的弹性(elasticity)和摩擦力(friction)。

  3. 创建小球

    • 使用 pymunk.Circle 创建一个圆形刚体。

    • 设置小球的弹性(elasticity)和摩擦力(friction)。

  4. 主循环

    • 每帧更新物理引擎(space.step)。

    • 使用 space.debug_draw 绘制物理空间的内容。

  5. 显示

    • 使用 pygame 显示六边形和小球的运动。

5. 自定义参数

你可以调整以下参数来改变模拟效果:

  • 重力:修改 space.gravity 的值。

  • 反弹系数:修改 elasticity 的值(范围为 0 到 1)。

  • 摩擦力:修改 friction 的值。

  • 小球质量:修改 ball_mass 的值。


6. 总结

  • 使用 pymunk 可以轻松实现 2D 物理模拟。

  • 结合 pygame 可以实现图形显示和交互。

  • 这个脚本是一个简单的示例,你可以根据需要扩展功能,例如添加更多小球或更复杂的形状。

 


pymunk + pygame 模拟八边形小球弹跳运动
只需修改一行 num_sides = 8 ,另存为:test_pymunk_8e1b.py
运行 python test_pymunk_8e1b.py

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

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

相关文章

学习 Wireshark 分析 Android Netlog

Android 设备抓取的日志中,netlog 文件夹包含.cap文件可以使用Wireshark工具查看网络日志。 Wireshark 分析 DNS 步骤 在使用Wireshark分析网路日志时,要检查DNS解析是否正常,可以按照以下步骤操作: 识别DNS查询和回应 使用过滤器 udp.port == 53 来查看所有DNS相关的流量…

OpenHarmony启动系统-U-Boot简介和源码下载与编译

OpenHarmony系统启动流程简述 设备上电后,OpenHarmony系统大致经历以下3个阶段: 1.BootRom代码引导加载UBoot; 2.UBoot启动初始化硬件资源,引导并加载系统内核(Linux内核); 3.Kernel(LiteOs,Linux内核)启动、加载驱动…

论文笔记-NeurIPS2017-DropoutNet

论文笔记-NeurIPS2017-DropoutNet: Addressing Cold Start in Recommender Systems DropoutNet:解决推荐系统中的冷启动问题摘要1.引言2.前言3.方法3.1模型架构3.2冷启动训练3.3推荐 4.实验4.1实验设置4.2在CiteULike上的实验结果4.2.1 Dropout率的影响4.2.2 实验结…

ctf网络安全赛题

CTF简介 CTF(Capture The Flag)中文一般译作夺旗赛,在网络安全领域中指的是网络安全技术人员之间进行技术竞技的一种比赛形式。CTF起源于1996年DEFCON全球黑客大会,以代替之前黑客们通过互相发起真实攻击进行技术比拼的方式。发展…

一周学会Flask3 Python Web开发-WTForms表单验证

锋哥原创的Flask3 Python Web开发 Flask3视频教程: 2025版 Flask3 Python web开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili 我们可以通过WTForms表单类属性的validators属性来实现表单验证。 常用的WTForms验证器 验证器说明DataRequired(messageNo…

工业巡检进入‘无人化+AI’时代:无人机智能系统的落地实践与未来

在现代化工业生产、建筑设施和交通运输等领域,设备设施的稳定运行是保障安全和效率的核心。传统人工巡检方式受限于效率低、成本高、漏检风险大等问题,已难以满足日益复杂的运维需求。在此背景下,无人机智能巡检系统凭借其高效性、智能化和精…

CentOS 7中安装Dify

Dify 是一个开源的 LLM 应用开发平台。其直观的界面结合了 AI 工作流、RAG 管道、Agent、模型管理、可观测性功能等,让您可以快速从原型到生产。尤其是我们本地部署DeepSeek等大模型时,会需要用到Dify来帮我们快捷的开发和应用。 大家可以参考学习它的中…

Kmeans算法来实现RFM指标计算步骤

K-Means(K均值)是一种经典的无监督聚类算法,主要用于将数据集划分为 KKK 个不同的簇(Cluster)。 它基于最小化簇内样本的平方误差,即最小化数据点与簇中心的距离之和。 1. K-Means 算法原理 (1) 主要步骤 …

C# .NET Core HttpClient 和 HttpWebRequest 使用

HttpWebRequest 这是.NET创建者最初开发用于使用HTTP请求的标准类。HttpWebRequest是老版本.net下常用的,较为底层且复杂,访问速度及并发也不甚理想,但是使用HttpWebRequest可以让开发者控制请求/响应流程的各个方面,如 timeouts,…

run方法执行过程分析

文章目录 run方法核心流程SpringApplicationRunListener监听器监听器的配置与加载SpringApplicationRunListener源码解析实现类EventPublishingRunListener 初始化ApplicationArguments初始化ConfigurableEnvironment获取或创建环境配置环境 打印BannerSpring应用上下文的创建S…

1.从0搭建前端Vue项目工程

我们通过vue官方提供的脚手架Vue-cli来快速生成一个Vue的项目模板。 **注意:**需要先安装NodeJS,然后才能安装Vue-cli。 环境准备好了,接下来我们需要通过Vue-cli创建一个vue项目,然后再学习一下vue项目的目录结构。Vue-cli提供了…

C语言学习笔记-初阶(27)操作符详解1:位操作

1. 操作符的分类 上述的操作符,我们已经学过算术操作符、赋值操作符、逻辑操作符、条件操作符和部分的单目操作符,今天继续介绍⼀部分,操作符中有一些操作符和二进制有关系,我们先铺垫一下二进制的和进制转换的知识。 2. 二进制、…

蓝桥杯备考:动态规划线性dp之传球游戏

按照动态规划的做题顺序 step1&#xff1a;定义状态表示 f[i][j] 表示 第i次传递给了第j号时一共有多少种方案 step2: 推到状压公式 step3:初始化 step4:最终结果实际上就是f[m][1] #include <iostream> #include <cstring> using namespace std;const int N …

FinRobot:一个使用大型语言模型进行金融分析的开源AI代理平台

文章目录 前言一、生态系统1. 金融AI代理&#xff08;Financial AI Agents&#xff09;2. 金融大型语言模型&#xff08;Financial LLMs&#xff09;3. LLMOps4. 数据操作&#xff08;DataOps&#xff09;5. 多源LLM基础模型&#xff08;Multi-Source LLM Foundation Models&am…

基于Windows11的RAGFlow安装方法简介

基于Windows11的RAGFlow安装方法简介 一、下载安装Docker docker 下载地址 https://www.docker.com/ Download Docker Desktop 选择Download for Winodws AMD64下载Docker Desktop Installer.exe 双点击 Docker Desktop Installer.exe 进行安装 测试Docker安装是否成功&#…

uniapp 常用 UI 组件库

1. uView UI 特点&#xff1a; 组件丰富&#xff1a;提供覆盖按钮、表单、图标、表格、导航、图表等场景的内置组件。跨平台支持&#xff1a;兼容 App、H5、小程序等多端。高度可定制&#xff1a;支持主题定制&#xff0c;组件样式灵活。实用工具类&#xff1a;提供时间、数组操…

【四.RAG技术与应用】【12.阿里云百炼应用(下):RAG的云端优化与扩展】

在上一篇文章中,我们聊了如何通过阿里云百炼平台快速搭建一个RAG(检索增强生成)应用,实现文档智能问答、知识库管理等基础能力。今天咱们继续深入,聚焦两个核心问题:如何通过云端技术优化RAG的效果,以及如何扩展RAG的应用边界。文章会穿插实战案例,手把手带你踩坑避雷。…

LabVIEW虚拟频谱分析仪

在电子技术快速发展的今天&#xff0c;频谱分析已成为信号优化与故障诊断的核心手段。传统频谱分析仪虽功能强大&#xff0c;但价格高昂且体积笨重&#xff0c;难以满足现场调试或移动场景的需求。 基于LabVIEW开发的虚拟频谱分析仪通过软件替代硬件功能&#xff0c;显著降低成…

解决各大浏览器中http地址无权限调用麦克风摄像头问题(包括谷歌,Edge,360,火狐)后续会陆续补充

项目场景&#xff1a; 在各大浏览器中http地址调用电脑麦克风摄像头会没有权限&#xff0c;http协议无法使用多媒体设备 原因分析&#xff1a; 为了用户的隐私安全&#xff0c;http协议无法使用多媒体设备。因为像摄像头和麦克风属于可能涉及重大隐私问题的API&#xff0c;ge…

知识图谱科研文献推荐系统vue+django+Neo4j的知识图谱

文章结尾部分有CSDN官方提供的学长 联系方式名片 文章结尾部分有CSDN官方提供的学长 联系方式名片 关注B站&#xff0c;有好处&#xff01; &#x1f4d1; 编号&#xff1a;D030 &#x1f4d1; vuedjangoneo4jmysql 前后端分离架构、图数据库 &#x1f4d1; 文献知识图谱&#…