碰撞次数与π的关系问题程序求解
碰撞次数与π的关系?
最近看到一个有意思的问题,如下图所示的两个理想状态下的滑块完全弹性碰撞,
M的初速度为u0
m的初速度为0
k 为 M和m的质量比,
k= 1, 碰撞次数为3 (M,m碰撞,m和墙碰撞,m,M碰撞)
k= 100, 碰撞次数为31
k= 10000, 碰撞次数为314
相关介绍及求解视频
如何从碰撞过程求圆周率π?一个奇妙的物理、代数、几何结合问题_哔哩哔哩_bilibili
腾讯内容开放平台
这个问题很对牛顿老先生的胃口,对我来说是很头疼。
碰撞的数值解为[π *√k ]
如同斐波拉契数列有通项公式,但我们还经常程序来计算某一项值一样,这里我们也来尝试使用程序来求解碰撞的次数。
由于有碰撞时的动量守恒和能量守恒,通过解二元二次方程,我们可以求得碰撞后的速度,
如果碰撞后,小球和大球都向右,且小球的速度小于(等于)大球的速度,这个时候就不会再有碰撞了,小球追不上了。
每一次,我们都可以通过数值求解来计算2个小球的速度,进而来判断是否可以继续碰撞。
这对编程来说,不是太难,只是有些繁琐,有的编程语言还提供了很方便的库方法。
递推
这里竟然有比较递推关系可以挖掘出来,程序员对递推是精神抖擞的。
我们假设向右的方向为正方向,大球M的初始速度为u0,小球的初始速度v0=0,
一次碰撞后,其速度分别为u1,v1,小球向左和墙碰撞后,速度反向,变为-v1,
这时,需要计算接下来的速度v2,u2,
有
mv2 + Mu2 = -mv1 + Mu1 动量守恒 1
mv1^2 + Mu1^2 = mv2^2 + Mu2^2 能量守恒 2
1式变换
m(v2 +v1) = M(u1-u2) 3
2式变换
mv1^2 - mv2^2 = Mu2^2 - Mu1^2
- m(v1+v2)(v1-v2) = M(u1+u2)(u1-u2) 4
4式 除以 3式,得
V1-v2 = u1 – u2
假设M = k*m
再结合1式,求得
u2 = (k-1)*u1 / (k+1) - 2*v1 / (k+1)
v2 = 2*k*u1 / (k+1) + (k-1)*v1 / (k+1)
每次2球的碰撞速度存在递推关系。
这样的递推公式的初始状态值是v1和u1,我们再把v0和u0带入1,2式,
V1 + ku1 = ku0
V1^2 + ku1^2 = ku0^2
得到
v1 = k * (u0-u1)
u1 = (k-1)*u0 / (k+1)
这样,就可以根据递推写程序了,u0赋值为一个负数就可以,表示向左。
程序
int getHitCounts(int k)
{int cnt = 0;float v0 = 0;float u0 = -1000;float u1 = (k-1)*u0 / (k+1);float v1 = k * (u0-u1);//first hitcnt++;float v2, u2;while (1){//the small ball hits the wall, than v1 becomes -v1//only when the direction towards left, it can hit the wallif (v1 < 0) {cnt++;}//the two ball both toward right //but the speed of small one less than the big one//they can not hit any more, so break the loopif (u1 > 0 && -v1 <= u1){break;}//the two ball hitcnt++;u2 = (k-1)*u1 / (k+1) - 2*v1 / (k+1);v2 = 2*k*u1 / (k+1) + (k-1)*v1 / (k+1);v1 = v2;u1 = u2;}return cnt;
}
扩展
从解公式π *√k 可以看出,在十进制里有这样的现象,在其他进制里也是这样,
如getHitCounts(7 * 7) 的结果是22
22的7进制值为31
参考资料:
一个与圆周率π有关的碰撞计数谜题 - 知乎
碰撞次数与π的关系问题程序求解相关推荐
- 夫妻过河 c语言程序,求解夫妻过河问题.doc
求解夫妻过河问题83275933 本科生毕业论文 论文题目: matlab求解夫妻过河问题 摘要 渡河问题.始于公元8 世纪,至今它仍是一个逻辑难题,许多数学建模教材上已经提到.这个问题指的是:有不同 ...
- java 输入 方程,用java 编写一程序,求解一元二次方程:aX2+bX+c=0.参数a、b及c从命令行做参数输入 java...
题目: 用java 编写一程序,求解一元二次方程:aX2+bX+c=0.参数a.b及c从命令行做参数输入 java 答案参考: 以下程序在jdk5.0测试通过 import java.util.Sca ...
- LeetCode 2211. 统计道路上的碰撞次数
文章目录 1. 题目 2. 解题 1. 题目 在一条无限长的公路上有 n 辆汽车正在行驶.汽车按从左到右的顺序按从 0 到 n - 1 编号,每辆车都在一个 独特的 位置. 给你一个下标从 0 开始的 ...
- 编写lisp程序解一元二次方程_用C语言编写一程序求解一元二次方程的根。
展开全部 C语言编写一程序求解32313133353236313431303231363533e78988e69d8331333365643661一元二次方程的根: #include #include ...
- 详细解释:Epoch、batch_size批处理大小、迭代次数之间的关系
Epoch.batch_size批处理大小.迭代次数之间的关系 问题:当遇到参数Epoch时,我们应该将其具体设置多少呢?或者应该迭代多少次呢? 举例说明 问题:当遇到参数Epoch时,我们应该将其具 ...
- 车桥耦合(公路梁桥,斜拉桥,悬索桥等),方法有基于MATLAB-ANSYS建模程序求解
1.车桥耦合(公路梁桥,斜拉桥,悬索桥等),方法有基于MATLAB-ANSYS建模程序求解 基于ANSYS全过程车桥耦合命令流建模求解. 程序通用性很强,换个桥梁参数和车辆参数即可实现. 2.梁桥,斜 ...
- 编程序求解方程实数根
上机内容:C程序的编写和运行 上机目的:掌握简单C程序的编辑.编译.连接和运行的一般过程 我的程序: #include<stdio.h> #include<math.h>flo ...
- 编写一个表达学生和课程关系的程序,定义两个类Student和Course.在Student类中有一个Course的数组,表示学生所选的课程
编写一个表达学生和课程关系的程序, 定义两个类Student和Course.在Student类中有一个Course的数组,表示学生所选的课程;在Course类里有一个Student数组,表示选了该课程 ...
- c语言编程木块碰撞次数,C语言实用程序设计100例
第一篇 基础与提高 实例1 利用库函数编写基本显示程序 3 实例2 变量属性 5 实例3 运算符与类型 7 实例4 关于程序结构 9 实例5 显示函数曲线图 12 实例6 二分法迭代的应用 15 实例 ...
- scala语言的底层是java实现的_Scala学习笔记一(与Java、Jvm的关系以及程序执行流程分析)...
一.Scala语言与Java.Jvm的关系分析 Scala语言是马丁奥德斯基接触Java语言后,针对Java语言的特点,将函数式编程语言的特点融合到Java中,由此发明的.Scala语言和Java语言 ...
最新文章
- return false
- 多目标遗传优化算法nsga2求解复杂约束问题【python源码实现,二进制编码】
- 攻击 | 神奇的木马(虚拟机模拟木马入侵)
- 三目运算符的空指针问题
- 源码编译wget问题解决
- hive2mysql的udf_hive中的UDF函数
- jsp+ssh+mysql Java web学生考勤管理系统源码附视频指导运行教程
- android 圆形自定义进度条,Android实现自定义圆形进度条
- 最大子段和问题(3种方法)
- 困扰我两天的问题(nginx配置好ssl证书,https却不能访问)
- Java语法糖以及实现
- Cannot allocate memory
- 河南省申请测绘资质保密人员要求
- cl.ez6.xyz index.php,[BJDCTF2020]EzPHP-POP链
- 2019版云计算大数据学习路线图(含大纲+视频+工具+书籍+面试)
- 输入一行字符(输入以字符#结束),分别统计其中字母和数字字符的个数。
- DCM+BUFG的使用
- HTML给整个框架插入背景图片
- 计算可由time_t数据类型表示的最近时间。如果超出了这一时间将会如何?
- HTML5权威指南观后笔记
热门文章
- 强大的Windows 10数字权利获取工具HWIDGEN
- 计算机中英汉字段如何切换,电脑上中英文切换按哪个键
- 小象学院 零基础Python入门 案例四 52周存钱挑战v_4.0
- 可视化滤波器fvtool
- phpstudy开机自启
- python编程一球从100米_Python求解一个球从100米高度自由落下的问题
- matlab中或者的表达,MATLAB
- Issue during builing Android app with ant under Win7
- 2000元台式电脑组装配置单2021 2000元组装电脑配置清单
- pythonlambda多行_Python中通过lambda抛异常的奇迹淫巧