python实现金属杆与圆形纸片运动模拟

以下是一个实现金属杆与圆形纸片运动模拟,并计算圆珠笔在纸片上轨迹热力图的 Python 程序。该程序使用 numpy 进行数值计算,matplotlib 进行可视化,tkinter 构建交互界面。

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.widgets import Slider
import tkinter as tk
from tkinter import messagebox# 定义常量
L = 525.83  # 金属杆长度 (mm)
theta0 = np.radians(18.53)  # 初始角度 (弧度)
r = 373.38  # 纸片半径 (mm)
x0 = -443.33  # 纸片中心 x 坐标 (mm)
y0 = -256.402  # 纸片中心 y 坐标 (mm)# 初始化参数
T = 60  # 时间 (秒)
R = 30  # 转速 (转/分钟)
W = 10  # 扫动速度 (sweep/分钟)# 创建主窗口
root = tk.Tk()
root.title("运动模拟参数设置")# 创建标签和输入框
tk.Label(root, text="时间 T (5 - 1800 秒):").grid(row=0, column=0)
T_entry = tk.Entry(root)
T_entry.insert(0, str(T))
T_entry.grid(row=0, column=1)tk.Label(root, text="转速 R (5 - 150 转/分钟):").grid(row=1, column=0)
R_entry = tk.Entry(root)
R_entry.insert(0, str(R))
R_entry.grid(row=1, column=1)tk.Label(root, text="扫动速度 W (1 - 30 个 sweep/分钟):").grid(row=2, column=0)
W_entry = tk.Entry(root)
W_entry.insert(0, str(W))
W_entry.grid(row=2, column=1)def run_simulation():global T, R, Wtry:T = float(T_entry.get())R = float(R_entry.get())W = float(W_entry.get())if 5 <= T <= 1800 and 5 <= R <= 150 and 1 <= W <= 30:simulate(T, R, W)else:messagebox.showerror("输入错误", "请输入有效的参数范围。")except ValueError:messagebox.showerror("输入错误", "请输入有效的数字。")# 创建运行按钮
run_button = tk.Button(root, text="运行模拟", command=run_simulation)
run_button.grid(row=3, column=0, columnspan=2)def simulate(T, R, W):# 计算时间步长dt = 0.01  # 时间步长 (秒)num_steps = int(T / dt)# 初始化轨迹数组trajectory_x = []trajectory_y = []for t in np.arange(0, T, dt):# 计算纸片的旋转角度phi = 2 * np.pi * R * t / 60  # 纸片旋转角度 (弧度)# 计算金属杆的扫动角度sweep_angle = 2 * np.pi * W * t / 60  # 扫动角度 (弧度)theta = theta0 + sweep_angle# 计算圆珠笔的位置x_pen = L * np.sin(theta)y_pen = -L * np.cos(theta)# 计算纸片上点的位置x_circle = x0 + r * np.cos(phi)y_circle = y0 + r * np.sin(phi)# 计算圆珠笔在纸片上的投影位置dx = x_pen - x_circledy = y_pen - y_circledist = np.sqrt(dx**2 + dy**2)if dist <= r:trajectory_x.append(x_pen)trajectory_y.append(y_pen)# 创建热力图heatmap, xedges, yedges = np.histogram2d(trajectory_x, trajectory_y, bins=100)extent = [xedges[0], xedges[-1], yedges[0], yedges[-1]]plt.figure(figsize=(8, 8))plt.imshow(heatmap.T, extent=extent, origin='lower', cmap='hot')plt.colorbar(label='轨迹密度')plt.title('圆珠笔在纸片上的轨迹热力图')plt.xlabel('X 坐标 (mm)')plt.ylabel('Y 坐标 (mm)')plt.show()# 运行主循环
root.mainloop()

代码说明:

  1. 常量定义:定义金属杆长度、初始角度、纸片半径和中心坐标等常量。
  2. 交互界面:使用 tkinter 构建一个简单的交互界面,允许用户输入时间 T、转速 R 和扫动速度 W
  3. 模拟函数simulate 函数根据用户输入的参数进行运动模拟,计算圆珠笔在纸片上的轨迹,并生成热力图。
  4. 热力图生成:使用 numpyhistogram2d 函数计算轨迹的二维直方图,然后使用 matplotlibimshow 函数绘制热力图。

使用方法:

  1. 运行程序,弹出参数设置窗口。
  2. 输入时间 T、转速 R 和扫动速度 W,确保参数在有效范围内。
  3. 点击“运行模拟”按钮,程序将计算并显示圆珠笔在纸片上的轨迹热力图。

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

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

相关文章

深入解析“legit”的地道用法——从俚语到正式表达:Sam Altman用来形容DeepSeek: legit invigorating(真的令人振奋)

深入解析“legit”的地道用法——从俚语到正式表达 一、引言 在社交媒体、科技圈甚至日常对话中&#xff0c;我们经常会看到或听到“legit”这个词。比如最近 Sam Altman 在 X&#xff08;原 Twitter&#xff09;上发的一条帖子中写道&#xff1a; we will obviously deliver …

微机原理与接口技术期末大作业——4位抢答器仿真

在微机原理与接口技术的学习旅程中&#xff0c;期末大作业成为了检验知识掌握程度与实践能力的关键环节。本次我选择设计并仿真一个 4 位抢答器系统&#xff0c;通过这个项目&#xff0c;深入探索 8086CPU 及其接口技术的实际应用。附完整压缩包下载。 一、系统设计思路 &…

【大模型LLM面试合集】大语言模型架构_MHA_MQA_GQA

MHA_MQA_GQA 1.总结 在 MHA&#xff08;Multi Head Attention&#xff09; 中&#xff0c;每个头有自己单独的 key-value 对&#xff1b;标准的多头注意力机制&#xff0c;h个Query、Key 和 Value 矩阵。在 MQA&#xff08;Multi Query Attention&#xff09; 中只会有一组 k…

【Transformer】手撕Attention

import torch from torch import nn import torch.functional as F import mathX torch.randn(16,64,512) # B,T,Dd_model 512 # 模型的维度 n_head 8 # 注意力头的数量多头注意力机制 class multi_head_attention(nn.Module): def __init__(self, d_model, n_hea…

【Linux】 冯诺依曼体系与计算机系统架构全解

Linux相关知识点可以通过点击以下链接进行学习一起加油&#xff01;初识指令指令进阶权限管理yum包管理与vim编辑器GCC/G编译器make与Makefile自动化构建GDB调试器与Git版本控制工具Linux下进度条 冯诺依曼体系是现代计算机设计的基石&#xff0c;其统一存储和顺序执行理念推动…

冯·诺依曼体系结构

目录 冯诺依曼体系结构推导 内存提高冯诺依曼体系结构效率的方法 你使用QQ和朋友聊天时&#xff0c;整个数据流是怎么流动的&#xff08;不考虑网络情况&#xff09; 与冯诺依曼体系结构相关的一些知识 冯诺依曼体系结构推导 计算机的存在就是为了解决问题&#xff0c;而解…

全面认识了解DeepSeek+利用ollama在本地部署、使用和体验deepseek-r1大模型

文章目录 一、DeepSeek简介二、技术特点三、架构设计3.1、DeepSeek-V33.2、DeepSeek-V23.3、DeepSeek-R1 四、DeepSeek算法4.1、DeepSeek LLM 算法4.2、DeepSeek-V2 算法4.3、DeepSeek-R1 算法4.4、DeepSeek 在算力优化上的算法 五、DeepSeek的使用六、本地部署DeepSeek R1模型…

Python 梯度下降法(七):Summary

文章目录 Python 梯度下降法&#xff08;七&#xff09;&#xff1a;Summary一、核心思想1.1 核心思想1.2 优化方法概述1.3 第三方库的使用 二、 BGD2.1 介绍2.2 torch 库算法2.2 代码示例2.3 SGD2.4 SGD代码示例2.5 MBGD2.6 MBGD 代码示例 三、 Adagrad3.1 介绍3.2 torch 库算…

SpringBoot Web开发(SpringMVC)

SpringBoot Web开发&#xff08;SpringMVC) MVC 核心组件和调用流程 Spring MVC与许多其他Web框架一样&#xff0c;是围绕前端控制器模式设计的&#xff0c;其中中央 Servlet DispatcherServlet 做整体请求处理调度&#xff01; . 除了DispatcherServletSpringMVC还会提供其他…

Web_php_unserialize

代码审计 <?php class Demo { private $file index.php;public function __construct($file) { $this->file $file; }、 //接收一个参数 $file 并赋值给私有属性 $filefunction __destruct() { echo highlight_file($this->file, true); } //在对象销毁时调用&…

Spring Web MVC基础第一篇

目录 1.什么是Spring Web MVC&#xff1f; 2.创建Spring Web MVC项目 3.注解使用 3.1RequestMapping&#xff08;路由映射&#xff09; 3.2一般参数传递 3.3RequestParam&#xff08;参数重命名&#xff09; 3.4RequestBody&#xff08;传递JSON数据&#xff09; 3.5Pa…

安装anaconda3 后 电脑如何单独运行python,python还需要独立安装吗?

安装anaconda3 后 电脑如何单独运行python&#xff0c;python还需要独立安装吗? 电脑第一此安装anaconda用于jupyter notebook使用。 但是在运行cmd的时候&#xff0c;输入python --version 显示未安装或跳转商店提示安装。 明明我可以运行python但是为什么cmd却说我没安装呢…

分布式事务组件Seata简介与使用,搭配Nacos统一管理服务端和客户端配置

文章目录 一. Seata简介二. 官方文档三. Seata分布式事务代码实现0. 环境简介1. 添加undo_log表2. 添加依赖3. 添加配置4. 开启Seata事务管理5. 启动演示 四. Seata Server配置Nacos1. 修改配置类型2. 创建Nacos配置 五. Seata Client配置Nacos1. 增加Seata关联Nacos的配置2. 在…

使用真实 Elasticsearch 进行高级集成测试

作者&#xff1a;来自 Elastic Piotr Przybyl 掌握高级 Elasticsearch 集成测试&#xff1a;更快、更智能、更优化。 在上一篇关于集成测试的文章中&#xff0c;我们介绍了如何通过改变数据初始化策略来缩短依赖于真实 Elasticsearch 的集成测试的执行时间。在本期中&#xff0…

OpenEuler学习笔记(十四):在OpenEuler上搭建.NET运行环境

一、在OpenEuler上搭建.NET运行环境 基于包管理器安装 添加Microsoft软件源&#xff1a;运行命令sudo rpm -Uvh https://packages.microsoft.com/config/centos/8/packages-microsoft-prod.rpm&#xff0c;将Microsoft软件源添加到系统中&#xff0c;以便后续能够从该源安装.…

基于Python的简单企业维修管理系统的设计与实现

以下是一个基于Python的简单企业维修管理系统的设计与实现&#xff0c;这里我们会使用Flask作为Web框架&#xff0c;SQLite作为数据库来存储相关信息。 1. 需求分析 企业维修管理系统主要功能包括&#xff1a; 维修工单的创建、查询、更新和删除。设备信息的管理。维修人员…

Van-Nav:新年,将自己学习的项目地址统一整理搭建自己的私人导航站,供自己后续查阅使用,做技术的同学应该都有一个自己网站的梦想

嗨&#xff0c;大家好&#xff0c;我是小华同学&#xff0c;关注我们获得“最新、最全、最优质”开源项目和高效工作学习方法 Van-Nav是一个基于Vue.js开发的导航组件库&#xff0c;它提供了多种预设的样式和灵活的配置选项&#xff0c;使得开发者可以轻松地定制出符合项目需求…

Android 音视频编解码 -- MediaCodec

引言 如果我们只是简单玩一下音频、视频播放&#xff0c;那么使用 MediaPlayer SurfaceView 播放就可以了&#xff0c;但如果想加个水印&#xff0c;加点其他特效什么的&#xff0c;那就不行了&#xff1b; 学习 Android 自带的硬件码类 – MediaCodec。 MediaCodec 介绍 在A…

UE 5.3 C++ 对垃圾回收的初步认识

一.UObject的创建 UObject 不支持构造参数。 所有的C UObject都会在引擎启动的时候初始化&#xff0c;然后引擎会调用其默认构造器。如果没有默认的构造器&#xff0c;那么 UObject 将不会编译。 有修改父类参数的需求&#xff0c;就使用指定带参构造 // Sets default value…

使用LLaMA-Factory对AI进行认知的微调

使用LLaMA-Factory对AI进行认知的微调 引言1. 安装LLaMA-Factory1.1. 克隆仓库1.2. 创建虚拟环境1.3. 安装LLaMA-Factory1.4. 验证 2. 准备数据2.1. 创建数据集2.2. 更新数据集信息 3. 启动LLaMA-Factory4. 进行微调4.1. 设置模型4.2. 预览数据集4.3. 设置学习率等参数4.4. 预览…