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类用于绘制直线,但这个类中好 ...
随机推荐
- 标准BST二叉搜索树写法
本人最近被各种数据结构的实验折磨的不要不要的,特别是代码部分,对数据结构有严格的要求,比如写个BST要分成两个类,一个节点类,要给树类,关键是所以操作都要用函数完成,也就是在树类中不能直接操作节点,需 ...
- .NET破解之百度云盘分享工具(批量)
似曾相识 百度云盘分享工具一款专门用于自动批量分享百度云文件的软件.其原理完全模拟在网页上登录百度云盘,模拟手工点击,将分享的"公共链接"或"私密链接"保存起来 ...
- Android开发重点难点1:RelativeLayout(相对布局)详解
前言 啦啦啦~博主又推出了一个新的系列啦~ 之前的Android开发系列主要以完成实验的过程为主,经常会综合许多知识来写,所以难免会有知识点的交杂,给人一种混乱的感觉. 所以博主推出“重点难点”系列, ...
- @synchronized(self)的用法 小结
@synchronized() 的作用是创建一个互斥锁,保证在同一时间内没有其它线程对self对象进行修改,起到线程的保护作用, 一般在公用变量的时候使用,如单例模式或者操作类的static变量中使用 ...
- Retrofit 入门学习
Retrofit 入门学习官方RetrofitAPI 官方的一个例子 public interface GitHubService { @GET("users/{user}/repos&qu ...
- SQL Server快捷键
SQL Server快捷键 金刚 SQL Server 快捷键 自己汇总的键盘操作快捷键 F7 切换到对象资源管理器 F5 执行T-Sql语句 F6 跳转到列属性 Alt+Enter 表属性 其实还有 ...
- MVC学习系列3--怎么从控制器向视图传递数据
在MVC中,从控制器到视图,传递数据,可以使用 ViewData 和 ViewBag:同样从视图到控制器,传递数据,可以使用Post,QueryString,或者隐藏域:最后从控制器到控制器,传递数据 ...
- 集合3--毕向东java基础教程视频学习笔记
Day 15 集合框架01 TreeSet02 TreeSet存储自定义对象03 二叉树04 实现Comparator方式排序05 TreeSet练习06 泛型概述07 泛型使用08 泛型类09 泛型 ...
- Linux系统检查查看桌面环境
Linux的桌面系统系统多达十几种,像gnome.kde.mate.cinnamon.lxde.xfce.jwm等.比较常用的一般是gnome.kde.xfce等.那么如何判断Linux系统安装了哪种 ...
- MS SQL Could not obtain information about Windows NT group/user 'domain\login', error code 0x5. [SQLSTATE 42000] (Error 15404)
最近碰到一个有趣的错误:海外的一台数据库服务器上某些作业偶尔会报错,报错信息如下所示: -------------------------------------------------------- ...