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
WPF实现物理效果 拉一个小球的更多相关文章
- wpf 模拟3D效果(和手机浏览图片效果相似)(附源码)
原文 wpf 模拟3D效果(和手机浏览图片效果相似)(附源码) pf的3D是一个很有意思的东西,类似于ps的效果,类似于电影动画的效果,因为动画的效果,(对于3D基础的摄像机,光源,之类不介绍,对于依 ...
- Blender简单动画:一个小球从一座山上滚下.
简单动画:一个小球从一座山上滚下.注:[key]方括号内是快捷键; {大括号}内是模式,页签名称或选项等. ==== 1. 建模: == 1.1 山[shift A] 建立平面plane,可以大 ...
- HTML5 模拟现实物理效果,感受 Web 技术魅力
Ball Pool 是一个基于 HTML5 技术的实验,模拟现实物理效果,让你在 Web 中感受自然物体的运动.玩法介绍:可以随意拖动圆球.点击页面背景.晃动浏览器.双击页面背景或者按住鼠标左键,有不 ...
- WPF提示框效果
WPF提示框效果 1,新建WPF应用程序 2,添加用户控件Message 3,在Message中编写如下代码 <Border x:Name="border" BorderTh ...
- HTML5 模拟现实物理效果
Ball Pool 是一个基于 HTML5 技术的实验,模拟现实物理效果,让你在 Web 中感受自然物体的运动.玩法介绍:可以随意拖动圆球.点击页面背景.晃动浏览器.双击页面背景或者按住鼠标左键,有不 ...
- 用Physijs在场景中添加物理效果
1.创建可用Physijs的基本Three.js场景 创建一个可用Physijs的Three.js场景非常简单,只要几个步骤即可.首先我们要包含正确的文件, 需要引入physi.js文件.实际模拟物理 ...
- 52.纯 CSS 创作一个小球绕着圆环盘旋的动画
原文地址:https://segmentfault.com/a/1190000015295466 感想:重点在小球绕环转动. HTML code: <div class="contai ...
- 纯 CSS 创作一个小球绕着圆环盘旋的动画
效果预览 在线演示 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/gKxyWo 可交互视频 ...
- WPF实现射线效果动画
原文:WPF实现射线效果动画 最近的一个项目中有个需求是:从一个点向其它多个点发出射线,要求这些射线同时发出,同时到达. 我就想到了用WPF的动画来实现.WPF中有Line类用于绘制直线,但这个类中好 ...
随机推荐
- 2015年最佳的12个 CSS 开发工具推荐
CSS所能做的就是改变网页的布局.排版和调整字间距等,但编写 CSS 并不是一项容易的任务,当你接触新的 CSS3 属性及其各自的浏览器前缀的时候,你会发现很伤脑经.值得庆幸的是一些优秀的开发人员提供 ...
- 原型对象prototype和原型属性[[Prototype]]
构造器:可以被 new 运算符调用, Boolean,Number,String,Date,RegExp,Error,Function,Array,Object 都是构造器,他们有各自的实现方式. 比 ...
- 更改pip源至国内镜像,显著提升下载速度(转载)
经常在使用Python的时候需要安装各种模块,而pip是很强大的模块安装工具,但是由于国外官方pypi经常被墙,导致不可用,所以我们最好是将自己使用的pip源更换一下,这样就能解决被墙导致的装不上库的 ...
- SharePoint 2013 图文开发系列之InfoPath入门
本文主要介绍SharePoint 2013中,简单发布InfoPath表单,并添加后台代码,示例比较简单,主要描述的是一个创建InfoPath的过程,而非多么深奥的后台代码,希望能够给初学者带来帮助. ...
- IOS开发基础知识--碎片12
1:Delegate运用 .h #import <UIKit/UIKit.h> @protocol FilterHeaderViewDelegate <NSObject> @r ...
- 敏捷遇上UML-需求分析及软件设计最佳实践(郑州站 2014-6-7)
邀请函: 尊敬的阁下:我们将在郑州为您奉献高端知识大餐,当敏捷遇上UML,会发生怎样的化学作用呢?首席专家张老师将会为您分享需求分析及软件设计方面的最佳实践,帮助您掌握敏捷.UML及两者相结合的实 ...
- 我的第一个React Native App
我用了三天时间实现了一个相对比较完整的React Native 新闻发布类型的示例.应用做得很简单,但大多React Native的组件都有用到,今天做一个分享(由于我电脑是Windows系统,所以只 ...
- 极简MarkDown排版介绍(How to)
如何切换编辑器 切换博客园编辑器为MarkDown:MarkDown Editor 选择一个在线编辑和预览站点:StackEdit 如何排版章节 MarkDown: 大标题 ========== 小标 ...
- JQuery,C#,sqlServer 实现无极限多级树形控件
最近好忙,好长时间没有更新博客了.......... 先看效果图: 此控件利用了 JQuery 插件: treeview google直接搜索就可以找到,这里就不提供链接了. 下载下来的压缩包包括了源 ...
- RelativeLayout的位置属性总结
使用"@id/…"时,所写的id必须在上文中已经定义,不能使用在下文定义的id RelativeLayout的子控件属性总结—— 按照控件之间常规的上下左右依次排列:(指定控件ID ...