【编程书籍】《The Nature of Code》笔记 -《代码本色》2.力 5.物理函数库
2.1 力和牛顿运动定律
1.定义:(源自牛顿运动定律)
力是一个向量,它使有质量的物体产生加速。
2.牛顿第一运动定律
除非有不均衡外力的作用,否则物体始终保持静止或匀速直线运动状态。
3.编程中对牛顿第一定律的理解
在平衡状态下,对象的速度向量(PVector对象)始终都是常量。
2.2 牛顿第三定律
1.定义:每个作用力都有一个大小相等、方向相反的反作用力。
2.理解:力总是成对出现,且这两个力大小相等,方向相反。与是否抵消无关。
3.编程中对牛顿第三定律的理解
如果我们要计算一个由A施加在B上的作用力f(PVector对象),必须额外施加一个由B作用在A上的反作用力(对象PVector.mult(f,-1))。
但我们大多数时候忽略其中一个力的作用者(作用者本身质量)
2.3 牛顿第二定律
1.定义:力等于质量乘以加速度。F = m * a / a = F / m
2.理解:加速度和力成正比,和质量成反比。这意味着如果你受一个推力作用产生运动,那么推力越大,运动越快(加速度越大);质量越大,运动越慢。
3.重力与质量 :重量等于质量乘以重力加速度 w = m * g
4.假定:质量 = 1 , F = a
位置由速度控制,而速度由加速度控制,加速度由力控制。
5.加入质量,a = F/m
2.4 摩擦力
1.定义:摩擦力是一种耗散力。耗散力的定义是:在运动中使系统总能量减少的力。
2.理解:只要两个物体的表面相互接触,它们之间就有摩擦力。摩擦力可分为静摩擦力(物体相对表面静止不动)和动摩擦力(物体在表面上运动),但我们只探讨有关动
摩擦力的话题。
2.应用:在小球实例上加入摩擦力
2.5 空气和流体阻力
1.定义:物体通过流体或者气体时同样会受摩擦力的作用,这种摩擦力有很多名字,如粘滞力、阻力和流体阻力。流体阻力产生的效果和前面的摩擦力相同(物体会减速)
a. -1/2是一个常量:-0.5。对我们来说,这个数值并没有多少意义,因为这只是一个随意编造的常量。但有一点很重要,该常量必须是一个负数,这代表阻力的方向和速度的方向相反(和摩擦力类似)。
b. ρ是希腊字母rho,它代表流体的密度,在这里我们并不需要关心它。为了简化问题,我们假设流体的密度是1。
c. v代表物体的移动速率。前面我们已经接触过它了,速率等于速度向量的大小:velocity.magnitude(), 指的平方或者。
d. A代表物体前端推动流体(或气体)流动部分的面积。举个例子,根据空气动力学设计的兰博基尼跑车所受的空气阻力肯定比四四方方的沃尔沃汽车小。为了方便模拟,我们假定物体都是球形的,因此,这个变量也将被我们忽略。是阻力系数,它和摩擦系数ρ类似,是一个常量。我们可以根据阻力的强弱确
定它的大小。
e. V看起来是否很熟悉?它代表速度的单位向量,也就是velocity.normalize()。和摩擦力一样,阻力的方向也和物体的运动方向
2.简化
特征:
1.在同一个力的作用下,物体的质量越大,加速度就越小。在本例中,阻力产生的反向加速度有减速的效果。因此物体的质量越小,减速越快。
2.物体的运动速度越快,所受的阻力也越大。
2.6 引力
1.定义:
- r代表由物体1指向物体2的单位向量。
2.问题:如何用引力实现让圆朝着鼠标所在的方向加速?
- 实现:
PVector attract(Mover m)
{PVector force = PVector.sub(location,m.location); //计算力的方向float distance = force.mag();force.normalize();float strength = (G * mass * m.mass) / (distance * distance); 计算力的大小force.mult(strength); //确定力的方向return force; //返回力,之后将它作用在对象上
}
- 注意:
(distance * distance)可能无限趋近甚至等于0,
因此计算前要将对象之间的距离限制在实际可能的范围内 - 拓展:
一个引力体,多个被吸引对象怎样实现?
用一个Attractor对象和多个Mover对象。
Mover对象传入Attractor特定函数中计算引力。
2.7 万有引(斥)力
- 实现:每个Mover对象都要检查所有其他Mover对象,嵌套循环实现(跳过 i == j )
因此我们相当于对每个Mover对象设置一个Attractor对象
或将Attractor对象中特定函数写入Mover中
5.物理函数库:背景
本章致力于讲解两个开源物理库——Box2D和toxiclibs中的VerletPhysics引擎。
Box2D已经发展成一个丰富的开源物理引擎,被用于无数项目,
尤其是一些成功的游戏,比如备受赞誉的益智游戏“蜡笔物理学“,
以及能在手机和平板上运行的“愤怒的小鸟”。
PBox2D GitHub代码库(http://github.com/shiffman/PBox2D)
*Kinematic:对此类物体,你可以通过设置它的速度向量来控制其移动。
注意,Kinematic的物体只会和动态的物体发生碰撞,
不会和静态或者Kinematic的物体发生碰撞
5.18 相连的系统:绳子
将所有的粒子连接在一起。粒子1和粒子0相连,粒子2和粒
子1相连,粒子3和粒子2相连(做物理管理)
3D情况下可以形成一张网(技术模拟布的物理效果)
5.19 相连的系统2:力导向图
使物体均匀、整洁且有序地排列。
1.节点不会和自身相连。
2.不需要反过来重复连接两个节点。
3.用弹簧将它们相连
【编程书籍】《The Nature of Code》笔记 -《代码本色》2.力 5.物理函数库相关推荐
- NMath应用教程:如何通过代码访问底层数据和应用函数
2019独角兽企业重金招聘Python工程师标准>>> 本文主要通过示例代码,讲述原生C#数学函数库NMath,如何编写代码以访问底层数据和应用函数. 访问底层数据 针对需要原生和遗 ...
- 乐鑫esp8266学习rtos3.0笔记第7篇:我又来了,基于rtos3.0版本 SDK编程 SPI 驱动 ws2812b 七彩灯,代码全部开源奉献给你们!
本系列博客学习由非官方人员 半颗心脏 潜心所力所写,不做开发板.仅仅做个人技术交流分享,不做任何商业用途.如有不对之处,请留言,本人及时更改. 序号 SDK版本 内容 链接 1 nonos2.0 搭建 ...
- wordvba编程代码大全_这几本基础编程书籍一定要看
程序员书库(ID:OpenSourceTop) 编译书单来自:https://simpleprogrammer.com/best-programming-books-2019/ 关于程序员类的技术书籍 ...
- 【编程技巧】Code snippets(代码片段)在Visual Studio中的使用(附简单的Snippet管理工具)
引言 Code snippet (代码片段)在VS中指的是基于IDE支持的利用快捷方式快速输入一小段,或者称之为一整块代码的功能,在日常编程,特别是在工作中写内容相似的业务代码时,利用Snippet功 ...
- c语言编程交党费,「二级C语言」Code Style(代码的风格)
某省情况插管疲软长发皓洁面临惯骗:发令魔术露齿临下纷扰乐道风习不迫?母亲黔江批答苦行龙头多数:奇丽马赛明理除痘妹子拼缀光导切点.曲水娄东算算初始潜江.两系善恶不妨曲波挡寒民居古币. 兰姆信物挂包森工例 ...
- 程序员必修内功,收集了上千本各类编程书籍【免费获取】
程序员必修内功,收集了上千本各类编程书籍,C,C++,Java,Python,机器学习,深度学习,Linux等等,还收集了很多英文原版书籍,看不惯中文的也可以选择英文哦.这些书籍都是我经过平时的积累, ...
- 《编程能力基础》刷题笔记(41 题)
<编程能力基础>刷题笔记 1. 单调数列 题解:递归.模拟.API 2. 实现 strStr() 题解:API.暴力.滑动窗口 3. 平衡二叉树 题解:迭代 4. 重复的子字符串 题解:模 ...
- python编程 书籍_Python编程十大最佳书籍
python编程 书籍 Starting out with Python? Books are going to be your most reliable way to do so. Let's f ...
- unix编程书籍推荐
[Unix下C/C++开发] unix编程书籍推荐 LiSteven 发布于 2年前,共有 0 条评论 Unix/Linux/BSD系统 相对于Windows,在UNIX下编程获得相关文档要方便很多. ...
- [Unix下C/C++开发] unix编程书籍推荐
[Unix下C/C++开发] unix编程书籍推荐 发表于1年前(2012-12-20 10:14) 阅读(256) | 评论(0) 6人收藏此文章, 我要收藏 赞0 Unix/Linux/BSD ...
最新文章
- mysql insert 自增_MySQL自增列插入0值的解决方案
- LeetCode之 insertion-sort-list insertion-sort-list
- sass 插值语句的使用
- Linux平台定时监控进程退出并自动重启的方法
- mysql 集群_MySQL之PXC集群搭建
- 探究Java常量本质及三种常量池(JVM)
- java高级mysql面试题_Java高级面试题
- [转]Linux下VSCode常用的快捷键
- 客户细分常见的十大错误
- Linear Programming and network flows P17 笔记
- 项目管理手记(八) SaaS模式的DRP系统是否适用?
- java删除占用的文件_「强力删除」自己用命令强制删除占用的文件或文件夹 - seo实验室...
- Edge浏览器或使用谷歌chrome内核的浏览器访问网页版高德地图很卡特别慢解决办法
- 横向时间轴插件 html5,jQuery横向滚动时间轴插件
- 使用智遥工作流,优化SAP请购流程
- truffle unbox react 初始化踩坑
- twitter授权登录 php,PHP版实现Twitter第三方登录的成功案例
- mysql安装2503,无法安装msi格式软件提示错误代码2502、2503怎么办?
- Java - IO部分的学习总结
- 什么是CT 技术。。。你懂了么?