阻尼运动算法在界面编程中的应用

【洞幺邦】单自由度弹簧阻尼系统 已知质量m=10kg,弹簧系数k=1000N/m,阻尼c=40N•s/m。且质量块的初始位移x(0)=0.02m,其初始速度x´(0)=0m/s。 阻尼是用来衡量系统自身消耗振动能量能力的物理量,在运动过程中,阻尼器的阻尼力总是与弹簧块的运动方向相反,如下式所示: (2.1) 其中, 为阻尼器的阻尼系数,数值为40N.s/m; 为弹簧块运动位移的导数。 弹簧受到外作用时,在线性范围内,弹簧力的大小与弹簧的形变成正比,弹簧力的方向总是与形变方向相反。弹簧提供的热力如下所示: 阅读详情

最近一直在考虑如何设计系统的启动封面,关键在于封面上众多的按钮无法很好的分类组织起来。后来在魔兽中得到了启示。
        其实最简约的设计最具持久美感,所以放弃了Panel、Tab容器的设计,而是参考War3的界面,按功能分成大类,当点击每个大类按钮时,对应的子功能按钮会像War3的侧边栏一样弹出,效果还是比较炫的。
       
         具体效果见War3的侧边栏吧,简单描述就是左边的两排按钮会从上面弹下来,就像皮球落地一样。下面讲一下具体实现。
         从初中物理知识中我们可以了解到这种运动属于阻尼运动,而皮球落地可以用取绝对值的阻尼运动公式来描述,程序中为了运动美观而没有取绝对值。
         阻尼运动又分为欠阻尼、过阻尼及临界阻尼,概念就不多说了,有兴趣自己看,在后面的代码分析中将会看到按钮运动是欠阻尼。
        阻尼运动公式:x(t) = A * exp(-1 * β * t) * cos(sprt(ω^2 - β^2 * t) + φ) , β是阻尼因子,ω是固有角频率。通过调整这两个参数的值即可获得我们预想的运动形式。
        下面列举出代码部分,语言为C#。
        

         int             fixY_1  =   224 ,                fixY_2  =   280 ,                fixY_3  =   336 ;
        
double     A_1  =   170 ,                    A_2  =   170 ,                    A_3  =   170 ;    
        
double     LocalY_1,                    LocalY_2,                    LocalY_3;
        
double     w_1  =   5 ,                        w_2  =   3 ,                        w_3  =   1 ;
        
double     B_1  =   0.4 ,                    B_2  =   0.3 ,                    B_3  =   0.5 ;
            
double     t_1  =   0 ,                         t_2  =   0 ,                        t_3  =   0 ;
            
double  LocalY_temp  =   0 ;
            
while ( true )
            
{    
                LocalY_1 
=  A_1  *  Math.Exp(  - 1   *  B_1  *  t_1)  *  Math.Cos(Math.Sqrt(w_1  *  t_1));    
                LocalY_2 
=  A_2  *  Math.Exp(  - 1   *  B_2  *  t_2)  *  Math.Cos(Math.Sqrt(w_2  *  t_2));    
                LocalY_3 
=  A_3  *  Math.Exp(  - 1   *  B_3  *  t_3)  *  Math.Cos(Math.Sqrt(w_3  *  t_3));    

                t_1 
=  t_1  +   0.5 ;
                t_2 
=  t_1;
                t_3 
=  t_1;
                                             
                bttn_LIV.Location 
=    new  Point( 160 , fixY_1  -  Convert.ToInt16(LocalY_1));    
                bttn_VBR.Location 
=   new  Point( 320 , fixY_1  -  Convert.ToInt16(LocalY_1));    
                bttn_OSA.Location 
=    new  Point( 160 , fixY_2  -  Convert.ToInt16(LocalY_2));    
                bttn_Sens.Location 
=    new  Point( 320 , fixY_2  -  Convert.ToInt16(LocalY_2));    
                bttn_BR.Location 
=      new  Point( 160 , fixY_3  -  Convert.ToInt16(LocalY_3));    
                bttn_Respon.Location 
=   new  Point( 320 , fixY_3  -  Convert.ToInt16(LocalY_3));    
                Application.DoEvents();        
       
                
if (LocalY_temp  ==  LocalY_1)
                    
break ;
                
else
                    LocalY_temp 
=  LocalY_1;
            }

    


         So easy,呵呵,上述程序中的大循环即完成了预期的效果。fix_Y 1-3定义了三行按钮停止后的Location.Y值,A_1 ~ A-3定义了三行按钮开始运动时的Location.Y值,w_1 ~ w_3,B_1 ~ B_3分别是固有角频率和阻尼因子,这六个值是关键值,分别决定了三行按钮的下落运动轨迹。这六个值需要根据情况进行调整,是整个程序比较耗时的部分。
        程序的整体思路是每循环一次,时间参数t_1~t_3增加,然后计算按钮的Location.Y值,改变按钮位置,直到两次循环按钮位置不再发生变化位 置。时间参数决定了运动的细腻程度,这个可以参考奈奎斯特定理,但由于CPU的运算周期一定,所以过小的时间步长会导致按钮运动过慢,这样又需要调整w和 β参数来改善运动速度,这三个变量互相影响,需要按实际情况进行调整。
        另外在程序运行时更改控件位置需要开启双缓冲,在.NET中这步操作非常简单,在窗体构造函数中加入:

             this .SetStyle(ControlStyles.UserPaint  |  ControlStyles.DoubleBuffer  |  ControlStyles.AllPaintingInWmPaint   |  ControlStyles.ResizeRedraw  |  ControlStyles.SupportsTransparentBackColor,  true );
            
this .UpdateStyles();


         关于双缓冲的内容就不介绍了。
         如果各位同学还有什么更好的算法欢迎讨论。

动画系统里的临界阻尼与MotionModel 玩家的输入,怎么转换成人物模型的速度、转向速度、加速度等参数怎么理解Damping这个变量什么是阻尼、临界阻尼与过阻尼,什么是阻尼系数什么是惯性化插值如何根据带阻尼的弹簧运动模型,转换成对应的用于插值的Damper代码?如何理解Motion Matching代码里面Daniel Holden写的Damper函数。 阅读详情

相关推荐

ROS专栏—基于STM32F103的INA219电源数据采集

文章主要记录了stm32f103对ina219的数据采集

热爱生活、奋斗前行 2353

温度滞回程序C语言,间隙式粘滞阻尼器温度变化对滞回性能影响的研究

A study on hysteretic behavior of clearance viscous damper influenced by temperaturePENG Lingyun1彭凌云(1976-),男,副研究员、硕导,主要研究方向:工程抗震与减振LI Yi1李毅(1993-),女,主要研究方向:工程抗震与减振LI Yongmei11、Beijing University of T...

weixin_35059431的博客 387

最新扣子(coze)案例:在coze上用DeepSeek+私有数据库、知识库,创建你的专属智能体

Gartner预测,到2026年,70%的企业将通过Al知识库实现「组织记忆外化」。数字化时代,数据已成为企业发展的核心资产。我们通过人工智能将知识库从“静态存储"升级为“智能服务”。让"沉睡宝藏"焕发新生,助力企业突破数据困局。

weixin_72689845的博客 2163

C语言中实现边沿函数算法及应用,这是抛弃PLC留下的痛!

很多从事PLC编程的朋友都知道,不管是什么品牌的PLC,都有上升沿和下降沿指令。❤那么什么情况下我们才会使用或必须使用边沿信号呢?边沿信号我们又如何获取呢?如图1,任何一个开关信号(或数字...

轻松学C语言 3485

AI数字人短视频数字人口播数字人分身建模流程全解析

在人工智能与计算机图形学蓬勃发展的当下,数字人建模作为打造虚拟数字人的核心环节,其流程复杂且精妙,融合了多种前沿技术与创意构思,为栩栩如生的数字人形象奠定基石。​。

2403_87518095的博客 1446

从AMBA到USB:手把手教你评估和选择Synopsys DesignWare里的免费商用IP

本文详细介绍了如何评估和选择Synopsys DesignWare中的免费商用IP,从AMBA到USB等关键模块。通过技术参数核对、验证环境评估和集成注意事项,帮助工程师高效利用这些经过硅验证的商业级IP,提升SoC设计效率。文章还探讨了免费IP与付费IP的边界策略,避免常见陷阱。

weixin_42683394的博客 297

阻尼函数及实现

文章目录对数衰减方法阻尼振荡python实现C++实现 对数衰减方法阻尼振荡 阻尼(damping)是指摇荡系统或振动系统受到阻滞使能量随时间而耗散的物理现象 阻尼振动是指,由于振动系统受到摩擦和介质阻力或其他能耗而使振幅随时间逐渐衰减的振动,又称减幅振动、衰减振动。 不论是弹簧振子还是单摆由于外界的摩擦和介质阻力总是存在,在振动过程中要不断克服外界阻力做功,消耗能量,振幅就会逐渐减小,经过一段时间,振动就会完全停下来。这种振幅随时间减小的振动称为阻尼振动. 阻尼有助于减小机槭结构的共振振幅,从而避免结

sinat_37842336的博客 6433

从ISCXTor2016到CICIDS2017:手把手教你下载和使用UNB的网络安全数据集

本文详细介绍了UNB大学发布的ISCXTor2016和CICIDS2017等网络安全数据集的下载与使用方法,特别适合加密流量识别和网络行为分析研究。文章提供了多种高效获取路径、文件结构解析及实战分析示例,帮助研究者快速上手这些真实场景捕获的精细标注数据集。

weixin_42524945的博客 630

模拟阻尼运动

游戏里面经常有转盘活动, 为了让转盘表现自然一点, 就需要自己模拟阻尼运动, 分为三个过程: 匀加速运动, 匀速运动, 匀减速运动 设定最高速度为MaxSpeed, SpeedUp1(匀加速运动的加速度), SpeedUp2(匀减速运动的加速度), Expect(期望停留的弧度点) 其实模拟只需要把两个加运动的区间模拟出来, 剩下的就是匀速运动的区间.   1 public ...

weixin_33953384的博客 406

强化学习在视觉导航中的应用

强化学习在视觉导航中的应用​ ,人工智能,计算机视觉,大模型,AI,强化学习(Reinforcement Learning, RL)是一种通过智能体(Agent)与环境进行交互,以最大化累积奖励为目标的机器学习范式。它不依赖于预定义的规则或大量标注数据,而是让智能体在试错过程中学习最优策略。计算机视觉(Computer Vision)则赋予智能体 “观察” 环境的能力,使其能够从图像或视频中提取有用信息。

不踩坑,不知道坑有多深;不总结,踩过的坑白踩。 22万+

低功耗设计:如何计算power switch的数量?

power switch加多了漏电高,加少了ir drop会有问题,具体加多少合适要如何计算呢?这里可以给一个参考方式。 第一步,先选switch cell的类型 通常选用HVT类型的switch cell,优点是漏电更低,缺点也很明显,电阻大,压降也大,switch cell的大小选择,可以选择(开启电阻x面积)最小的switch cell,即单位面积提供最小并联电阻的cell类型。 第二步,计算数量 选好类型,确定了开启电阻,可以按照如下公式计算数量: Ron/Xnum • W/V = V•P

m0_61544122的博客 3576

C语言程序设计简谐运动的模拟,C语言课程设计简谐振动实验的模拟.doc

C语言课程设计简谐振动实验的模拟《C语言程序设计》课程设计报告题 目简谐振动实验的模拟姓 名 学 号 同组人员 学 号 年级专业09电子信息工程(2)班指导教师 完成日期2010年6月13日目 录一、问题描述二、基本要求三、系统分析和过程四、流程图五、源程序代码六、小结及收获体会七、参考文献八、评定意见一:问题描述本程序设计是一个将物理问题与C语言程序设计结合的程序设计问题。能够实现用...

weixin_42301769的博客 1603

SAP_FI模块_固定资产期初导入全流程(含导入代码)

SAP 期初导入资产主数据以及金额相关的操作全流程记录,包含了批导程序的代码,以及错误记录

风沙的博客 1404

Abaqus之动力分析中的阻尼的设置

以下内容主要参考 -带你了解ABAQUS中如何定义各种阻尼,但有修改部分内容和细节。 1. 阻尼的含义 系统结构特征值和模态的求解是在无阻尼情况下得到的,而在动力学问题中,任意结构都应存在或大或小的阻尼,阻尼的大小将会对系统动力学响应产生一定的影响。 当系统作无阻尼自由振动时,由于没有能量输入与输出,系统机械能守恒,系统的振幅为常数。然而在实际结构中,这种无阻尼自由振动并不存在。结构运动时能量耗散,振幅将逐渐减小直至停止振动,这种能量耗散被称为阻尼(damping)。能量耗散来源于几个因素,其中包括.

wanjiac的博客 6万+

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

“阻尼、阻尼系数、阻尼比”

概念生活比喻物理意义数学表达特点阻尼关门缓冲器、汽车减震消耗能量、抑制运动的现象F = -c v一种效应或过程阻尼系数 (c)缓冲器的“调节旋钮”衡量阻尼作用强弱的物理参数c(在F = -c v中)有单位 (N·s/m),是绝对值阻尼比 (ζ)门关上是“晃着关”、“快速关”还是“爬着关”实际阻尼与临界阻尼的比值,描述运动状态无量纲,是相对值,用于系统动态响应分析。

良好的开始一般都会感到困难。 9328

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

阻尼衰减曲线用python_简谐运动之阻尼振动

续上一期的文章,我们今天接着来撸一撸带阻尼的简谐振子(damped oscillator)。我们假设振子在运动过程中受到的阻力仅与它的运动速度有关,并且阻力的大小简单的正比于速度的大小,即 ,这里 是一个描述阻力强弱的参数。结合简谐振子原本就受到的和位移成正比的回复力,我们可以写下阻尼振动的运动方程:注意这里的两个负号:第一个负号是因为回复力的方向和位移相反,第二个负号是因为阻力的作用方向和运动...

weixin_39987313的博客 2895

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

单自由度有阻尼自由振动:运动方程求解与Simulink实现

1. 介绍单自由度有阻尼自由振动; 2. 基于二阶常系数齐次线性微分方程求解振动; 3. 介绍无阻尼、过阻尼、临界阻尼、欠阻尼振动的区别; 4. 使用仿真软件Simulink绘制上述振动的位移曲线。

MichaelJiangJunC的博客 2801

结构反应中的阻尼与在ansys中的定义

阻尼存在于所有的振动结构体系中,是消耗体系振动能量,从而使得振动结构的反应分析减小,但结构的阻尼非常复杂,本文就常用的阻尼的类型,模型以及ansys中阻尼的类型和应用进行简单的介绍,仅供参考,有错误的话希望大家批评指正。ansys软件中有瑞丽阻尼,材料阻尼,常阻尼比,模态阻尼,单元阻尼,材料常阻尼系数,材料结构阻尼系数这七种阻尼。目前常用的阻尼模型主要有:粘性阻尼,滞变阻尼,以及库伦摩擦阻尼三种,以不同阻尼表示的单自由度体系的运动方程为例子说明。模态阻尼用于对不同的振动模态定义不同的阻尼比,即阵型阻尼。

zzkll123的博客 7256

【电磁阻尼】在重力和电磁阻尼力作用下物体的运动【含Matlab源码 13140期】

在重力和电磁阻尼力作用下物体的运动 完整代码,包运行;可提供运行操作视频!适合小白!

订阅付费专栏Matlab(奶茶价版),可赠送奶茶价版付费专栏指定代码1份; 843

阻尼

阻尼 阻尼(damping)是指任何振动系统在振动中由于外界作用或系统本身固有的原因引起的振动幅度逐渐下降的特性,以及此特性的量化表征。在电学中,是响应时间的意思。 阻尼(damping)的物理意义是力的衰减或物体在运动中的能量耗散。通俗地讲,就是阻止物体继续运动。当物体受到外力作用而振动时,会产生一种使外力衰减的反力,称为阻尼力(或减振力)。它和作用力的比被称为阻尼系数。通常阻尼力的方向总是...

《好好先生》专栏 1万+

关于阻尼振动

把上面三张图画在一起可以得到下图:其中,蓝色的是包络线x±A0e−βtx±A0​e−βt,红色的是欠阻尼情况下的x−tx-tx−t图象,橙色的是过阻尼情况下的x−tx-tx−t图象,紫色的是临界阻尼情况下的x−tx-tx−t图象。在系统只改变β\betaβ的情况下,发现临界阻尼情况下弹簧振子最快回到平衡状态。实际上,可以统一3(3)3的解的形式为xe−βtftxe−βtft.临界阻尼情况下的ft。

wr114514的博客 3320

阻尼衰减曲线用python_瑞利阻尼的应用

来源:筑信达微信公众号(ID:CISEC68924600),作者:筑信达 吴文博。瑞利 (Rayleigh)阻尼假设结构的阻尼矩阵是质量矩阵和刚度矩阵的组合,因其简单、方便,而在结构动力分析中得到了广泛应用。在SAP2000或ETABS的时程分析中,用户可以在直接积分法或FNA法中使用瑞利阻尼。本文简单介绍瑞利阻尼的原理,并通过案例分析使用瑞利阻尼时常见的误区。瑞利阻尼的基本原理就时...

weixin_39771614的博客 2037

微分方程(有阻尼的简谐运动)

微分方程 通过某些变量的变化率来求出原始函数的表达式 变化率比较好表达 例如 例如自由落体,物体始终受重力,加速度为ggg y¨(t)=−gy˙(t)=−gt+v0y(t)=−(1/2)gt2+v0t+y0 \begin{array}{c} \ddot{y}(t)=-g \quad \dot{y}(t)=-g t+v_{0} \\ y(t)=-(1 / 2) g t^{2}+v_{0} t+y_{0} \end{array} y¨​(t)=−gy˙​(t)=−gt+v0​y(t)=−(1/2)gt2+v

losangeles666的博客 7474

理论分享 | 认识阻尼:理解常见阻尼模型的区别与联系

阻尼是表征结构能量耗散的关键动力学特性,对振动系统的动态响应预测与控制具有重要意义。本文系统阐述了阻尼的基本概念与作用机理,重点分析了三种典型阻尼模型:粘性阻尼(与速度成正比)、结构阻尼(与振幅成正比)、库伦阻尼(摩擦阻尼)。在工程应用中,通常采用等效数学模型(如模态阻尼、瑞利阻尼)来近似模拟复杂阻尼行为,而非直接建模物理机理。研究表明,通过引入阻尼比这一无量纲参数,可以消除系统规模影响,实现不同结构阻尼特性的标准化比较。文章还揭示了结构阻尼与粘性阻尼在共振频率处的等效关系,为工程阻尼建模提供了理论依据。

SCXSYBZ的博客 1646
上一篇: c#GDI+绘图速度的一些差异不理解
下一篇: 天气预报查询
dadahacker
博客等级 码龄20年 78粉丝 120原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值