采用数值方法计算最速曲线
关于最速曲线的介绍有
http://zhidao.baidu.com/s/daily/2014-04-21/1403015178.html
内容比较丰富,还比较好玩
最速曲线公式
理论解很久之前就已经有了,如下
我找了半天也没有找到这个理论解是如何求出来的方法,但是我找到了一篇怎样用数值方法求最速曲线的算法,这篇文章的题目是《应用斯涅尔公式求解最速下降曲线问题研究》,在百度文库中有。这个方法我觉得很有意思,就在matlab中实现了这个算法。
特别要注意的是文章中提到的,如果入射角大于90°时,要考虑全反射,也就是入射角从正变为负,下降变为上升。
Matlab代码如下
<span style="font-size:18px;">x0 = 10;
y0 = 10;syms x;
f = (1-cos(x)) / (x - sin(x)) - y0 / x0;
x = vpasolve(f); %数值求解器
K = x0 / (x - sin(x));s = 0:0.01:x;
x = K*(s - sin(s));
y = K*(1 - cos(s));
plot(x,y, 'r-');
view([0,0,-1]);
hold on;
%-----------------------------------------上面是理论的结果-----------------------------------% 下面用数值方法求解最速曲线
etof = 1e-2; %误差,精度为0.1
a0 = 0; % 入射角的边值
a1 = pi/30; %dex = 0.1; %最大步长
dey = 0.1;while 1a_init = (a0 + a1) / 2; % 入射角的初值a = a_init;dx = dex; %起始步长dy = cot(a) * dx;while (dy > dey)dx = dx / 10; %细化步长dy = cot(a) * dx;endx = dx;y = dy;while (x + dx <= x0)yt = y + cot(a) * dx;if (yt < 0) break; %已久上升到初始高度,结束endif (sin(a) / sqrt(y) * sqrt(yt) >= 1) % 考虑全反射a = -a; yt = y + cot(a) * dx;endat = asin(sin(a) / sqrt(y) * sqrt(yt));x = x + dx;y = yt;a = at;dy = cot(a) * dx;while (dy < dey / 10 && dx < dex) %适当放大步长dx = dx * 10;dy = cot(a) * dx;endendif (abs(y - y0) < etof && x + dx > x0)break;endif (x + dx <= x0 || y < y0)a1 = a_init;elsea0 = a_init;end
enda = (a0 + a1) / 2;scatter(0, 0, 'go');
dx = dex;
dy = cot(a) * dx;
while (dy > dey)dx = dx / 10;dy = cot(a) * dx;
end
scatter(dx, dy, 'go');
x = dx;
y = dy;
while (x + dx<= x0)yt = y + cot(a) * dx;if (sin(a) / sqrt(y) * sqrt(yt) >= 1)a = -a;yt = y + cot(a) * dx;endat = asin(sin(a) / sqrt(y) * sqrt(yt));x = x + dx;y = yt;a = at;scatter(x, y, 'go');dy = cot(a) * dx;while (dy < dey / 10 && dx < dex)dx = dx * 10;dy = cot(a) * dx;end
end</span>
效果如下
采用数值方法计算最速曲线相关推荐
- python 采用数值方法计算最速曲线
原文:https://blog.csdn.net/WhoisPo/article/details/47149395
- R计算获取决策曲线数据(Decision Curve Analysis,DCA)并使用python进行可视化
R计算获取决策曲线数据(Decision Curve Analysis,DCA)并使用python进行可视化 目录 R计算获取决策曲线数据(Decision Curve Analysis,DCA)并使 ...
- python 最速曲线
关于最速曲线的介绍有 http://zhidao.baidu.com/s/daily/2014-04-21/1403015178.html 内容比较丰富,还比较好玩 最速曲线公式 理论解很久之前就已经 ...
- [team]开发中的“最速曲线”
最速曲线是一个物理中的概念,也就是小球从左上到右下,最快的曲线是红色的这条,这个和我们直觉中的"两点之间直线最短"有点不一样: 当然其原理就是最速曲线是一个平滑,且能保证全程速度很 ...
- 采用递归方法计算x的n次方。
采用递归方法计算x的n次方. **输入格式要求:"%d%d" 提示信息:"x=? n=?" **输出格式要求:"%d**%d=%d\n" 程 ...
- vegan稀释曲线 基因丰度_R语言 vegan包计算物种累计曲线
vegan 包是进行群落数据分析最常用的R包,其中的 specaccum 函数用来计算物种的累计曲线 首先看下官方示例: library(vegan) data(BCI) sp1 plot(sp1, ...
- Origin计算多条曲线的峰面积
背景介绍 前几天对一个自己造的化合物使用紫外(UV)进行全波长扫描,虽然波长是扫出来了,但是如何对每条曲线进行积分求峰的面积,以此进行下一步计算呢? 积分教程 下面是我们的一组数据,数据是从机器上直接 ...
- 详解scikit-learn计算ROC/AUC曲线
ROC和AUC定义 ROC全称是"受试者工作特征"(Receiver Operating Characteristic).ROC曲线的面积就是AUC(Area Under the ...
- 哪些物联网应用最适合采用雾计算?
有时在做出判断时真的是要靠自己,让别人为你指出方向是不可行的. 许多物联网系统所面临的情景与此相同.集中处理大量传感器数据会减慢决策,并增加带宽需求.而做出明智的决策最好靠近源头. 哪些决策应该靠近网 ...
- 绘制ROC 曲线 计算 AUC PR曲线(精准率 召回率)示例
#一 ROC评价 及曲线 AUC的值 准确率 auc 的参数来自假阳率 真阳率,一般与 metrics.roc_curve配合使用,来自sklearn正规示例网站 >>> fp ...
最新文章
- Spring boot自动配置使用
- C++Windows下CONTAINING_RECORD宏的用法和详解
- firefox扩展开发(八) :控件激活
- 【Python笔记】使用 re 模块实现正则表达式操作
- 《Web漏洞防护》读书笔记——第6章,XXE防护
- JavaCC详解 绝对干货
- 忘记了Excel工作表保护密码的解决办法
- install -save 和 -save-dev区别
- 如何进行git ssh文件的配置
- ARM Linux 内核 panic 之cache 一致性 ——cci-400 cache一致互联
- Maven安装与配置详解、多镜像节点的配置
- redis常用命令手册大全 - 笔记
- 人脸性别识别文献阅读笔记(3)
- 浅谈信息化,数字化,元宇宙,未来IT行业的机遇
- 墨子号量子计算机原型时间,科学网—“墨子号”量子卫星实现安全时间传递
- Logstash filter grok正则的使用及介绍
- Linux下cuda9.1安装Pytorch和Torchvision|简记
- python计算sin37_怎样计算 sin1°·sin2°·sin3°· … ·sin89°?
- MQL4学习之MACD Sample解读
- 求助!如果想从事3D建模需要选择什么专业?