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

WPF实现物理效果 拉一个小球

原文: WPF实现物理效果 拉一个小球

一直以来都对物理效果有神秘感,完全不知道怎么实现的.直到看到了周银辉在老早前写的一篇博客:http://www.cnblogs.com/zhouyinhui/archive/2007/06/23/793724.html 终于知道是怎么实现的了.

CompositionTarget类的Rendering事件.在每一帧成功渲染时触发.这样就能在极短的时间内对对象进行更细致的操作,以达到预期效果.

然而博客里并没有介绍得出结果公式的过程,导致我真的一头雾水了,所以决定重新写一下,分享给感兴趣的人.

先上效果图:

大概是这么个场景,一个橡皮筋拉着一个小球在一个充满介质的空间里运动,橡皮筋越长,拉力就越大,介质可以是空气,水,油等任何液体或气体物质,取决于他们的粘性系数.

公式

牛顿的公式

大家都很熟悉了:(可能吧,反正我是不熟悉,这都是我百度查的)

a=(v2-v1)/t

F=F拉-F阻=ma

s=vt+1/2at^2

其中a是加速度,v是速度,t是时间,F是受到的力,s是移动的距离

球体质量公式

m=4/3 * π * r^3 * ρ

其中m是质量,r是球半径,ρ是密度

粘滞阻力

没学过这种高级的物理,完全不知道,也是在百度查的

在理论力学中所说的"与物体速度一次方成正比的阻力"指的就是粘滞阻力 在空气中运动速度不十分快的物体 受到的阻力主要是粘滞阻力

斯托克斯公式 球形物体 F=6πηvr=3πηvd η为流体的粘性系数 r为球形物体的半径 d为球形物体的直径

 

公式都有了,需要做的就是找出在上次帧渲染和这次帧渲染这段时间在拉力和阻力的作用下的移动距离.

作用力和速度都看成是X轴和Y轴两个方向的.

这里取的是把wpf里一个单位的距离,就看成是1牛顿的力.粘性系数和球的密度作为参数设置.有了这些,就可以根据公式推导出移动距离.(过程略...就是套公式...源码里有注释...最后会附上源码)

 

然后,好不容易推出来了,运行程序发现小球不动.才发现我犯了个大错误,就是力和质量差的太悬殊,打个比方就像一个人拿橡皮筋去拉迪拜塔,肯定是拉不动.

所以我加了个系数小球直径的三次方在里面,打个比方大概可以理解成,拉的东西多大,我的力气就多大,跟被拉的东西大小无关.我去拉迪拜塔的时候,我已经和迪拜塔一样高了.

 

附上源码:拉小球物理效果.zip

相关文章:

  • Extjs的textfield的颜色设置和出现的问题笔记
  • nginx快速安装
  • 身份证号 js验证 validform
  • Alamofire动态Proxy,报出FAILURE: Error Domain=NSURLErrorDomain Code=-999 cancelled
  • NSPredicate
  • 从tcpdump抓包看TCP/IP协议
  • Linux Redhat 6.5 安装NFS服务
  • java中的Checked Exception和Unchecked Exception的区别
  • Linux常用基本命令:三剑客命令之-awk数组用法
  • 第一个hibernate程序
  • Java 学习(02)--数据类型/类型转换/键盘录入
  • Mac中显示文件夹的大小
  • 逛自己的微博,回顾曾经的那个“我”
  • 定制化vue-cli Template/webpack
  • linux常用命令之用户及用户组操作
  • 《Java8实战》-第四章读书笔记(引入流Stream)
  • AngularJS指令开发(1)——参数详解
  • chrome扩展demo1-小时钟
  • eclipse(luna)创建web工程
  • ERLANG 网工修炼笔记 ---- UDP
  • Lsb图片隐写
  • oschina
  • Redis的resp协议
  • SegmentFault 社区上线小程序开发频道,助力小程序开发者生态
  • Transformer-XL: Unleashing the Potential of Attention Models
  • Vue UI框架库开发介绍
  • 关键词挖掘技术哪家强(一)基于node.js技术开发一个关键字查询工具
  • 理解 C# 泛型接口中的协变与逆变(抗变)
  • 面试题:给你个id,去拿到name,多叉树遍历
  • raise 与 raise ... from 的区别
  • # 执行时间 统计mysql_一文说尽 MySQL 优化原理
  • (27)4.8 习题课
  • (4)logging(日志模块)
  • (二)【Jmeter】专栏实战项目靶场drupal部署
  • (翻译)terry crowley: 写给程序员
  • (附源码)ssm跨平台教学系统 毕业设计 280843
  • (六)软件测试分工
  • (算法)Game
  • (一)基于IDEA的JAVA基础12
  • (原創) 如何優化ThinkPad X61開機速度? (NB) (ThinkPad) (X61) (OS) (Windows)
  • .apk 成为历史!
  • .Net 6.0 处理跨域的方式
  • .NET Core工程编译事件$(TargetDir)变量为空引发的思考
  • .Net 应用中使用dot trace进行性能诊断
  • .Net调用Java编写的WebServices返回值为Null的解决方法(SoapUI工具测试有返回值)
  • .NET企业级应用架构设计系列之技术选型
  • .Net中ListT 泛型转成DataTable、DataSet
  • @Autowired自动装配
  • [] 与 [[]], -gt 与 > 的比较
  • [20150904]exp slow.txt
  • [ai笔记3] ai春晚观后感-谈谈ai与艺术
  • [ai笔记9] openAI Sora技术文档引用文献汇总
  • [Android 13]Input系列--获取触摸窗口
  • [c]扫雷
  • [C++] sqlite3_get_table 的使用