必威体育Betway必威体育官网
当前位置:首页 > IT技术

python 最速曲线

时间:2019-07-03 04:42:19来源:IT技术作者:seo实验室小编阅读:83次「手机版」
 

最速曲线

关于最速曲线的介绍有 

HTTP://zhidao.baidu.com/s/daily/2014-04-21/1403015178.HTML

内容比较丰富,还比较好玩

最速曲线公式

理论解很久之前就已经有了,如下

参考:https://blog.csdn.net/WhoisPo/article/details/47149395
# 下面用数值方法求解最速曲线
import math

x0 = 10;
y0 = 10;
etof = 1e-2; # 误差,精度为0
.1
a0 = 0; # 入射角的边值
a1 = math.pi / 30;

dex = 0.1; # 最大步长
dey = 0.1;

while (1):
    a_init = (a0 + a1) / 2; # 入射角的初值

    a = a_init;
    dx = dex; # 起始步长
    dy = 1/math.tan(a) * dx;
    while (dy > dey):
        dx = dx / 10; # 细化步长
        dy = 1/math.tan(a) * dx;
    #end
    x = dx;
    y = dy;
    while (x + dx <= x0):
        yt = y +1/math.tan(a) * dx;
        if (yt < 0):
            break; # 已久上升到初始高度,结束
        #end
        if (math.sin(a) / math.sqrt(y) * math.sqrt(yt) >= 1): # 考虑全反射
            a = -a;
            yt = y + 1/math.tan(a) * dx;
        #end
        at = math.asin(math.sin(a) / math.sqrt(y) * math.sqrt(yt));
        x = x + dx;
        y = yt;
        a = at;

        dy = 1/math.tan(a) * dx;
        while (dy < dey / 10 and dx < dex): # 适当放大步长
            dx = dx * 10;
            dy = 1/math.tan(a) * dx;
        #end
    #end

    if (abs(y - y0) < etof and x + dx > x0):
        break;
    #end
    if (x + dx <= x0 or y < y0):
        a1 = a_init;
    else:
        a0 = a_init;
    #end
#end

a = (a0 + a1) / 2;

# scatter(0, 0, 'go');
dx = dex;
dy = 1/math.tan(a) * dx;
while (dy > dey):
    dx = dx / 10;
    dy = 1/math.tan(a) * dx;
#end
# scatter(dx, dy, 'go');
x = dx;
y = dy;
while (x + dx <= x0):
    yt = y + 1/math.tan(a) * dx;
    if (math.sin(a) / math.sqrt(y) * math.sqrt(yt) >= 1):
        a = -a;
        yt = y + 1/math.tan(a) * dx;
    #end
    at = math.asin(math.sin(a) / math.sqrt(y) * math.sqrt(yt));
    x = x + dx;
    y = yt;
    a = at;
    # scatter(x, y, 'go');
    dy = 1/math.tan(a) * dx;
    while (dy < dey / 10 and dx < dex):
        dx = dx * 10;
        dy = 1/math.tan(a) * dx;
    #end

相关阅读

LM算法——列文伯格-马夸尔特算法(最速下降法,牛顿法,高

首先谈一下应用场景——在拟合的时候进行应用什么是拟合?你有一堆数据点,我有一个函数,但是这个函数的很多参数是未知的,我只知道你的

梯度下降法和最速下降法区别

1. 前言: 细微之处,彰显本质;不求甚解,难以理解。 一直以来,我都认为,梯度下降法就是最速下降法,反之亦然,老师是这么叫的,百度百科上是这

分享到:

栏目导航

推荐阅读

热门阅读