UVA 1356/ ZOJ 2614 Bridge 弧长积分+二分

#include <cstdio>
#include <cstring>
#include <cmath>
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;
//对积分sqrt(a^2+x^2)的求解
double fun(double a,double x)
{
    double aa=a*a,xx=x*x;
    return (x*sqrt(aa+xx)+aa*log(fabs(x+sqrt(aa+xx))))/2;
}
//求宽w,高h的抛物线弧长
double parabola(double w,double h)
{
    double a=4.0*h/(w*w);
    double b=1.0/(2*a);
    return (fun(b,w/2)-fun(b,0))*4*a;
}
int main()
{
    int T,tt=0;
    scanf("%d",&T);
    while(T--)
    {
        int d,h,b,l;
        scanf("%d%d%d%d",&d,&h,&b,&l);
        int n=(b+d-1)/d;//间隔数
        double d1=(double)b/n;
        double l1=(double)l/n;
        double x=0,y=h;
        //弧长随h单调递增,所以用二分法求得h
        while(y-x>1e-5)
        {
            double m=(x+y)/2;
            if(parabola(d1,m)<l1)x=m;
            else y=m;
        }
        if(tt!=0)
            printf("\n");
        printf("Case %d:\n%.2lf\n",++tt,h-x);
    }
    return 0;
}
/*
    纯粹的数学积分题,高数不行啊,寒一个。。。。
    
    建立抛物线公式f(x)=a*x^2,其中a=4*h/(w*w);
    有积分中的弧长公式2∫(0,w/2)√(1+(f'(x))^2)dx=2∫(0,w/2)√(1+4*a^2*x^2)^2)dx
=4a∫(0,w/2)√((1/(2*a))^2+x^2)dx
    
    再由积分表公式∫√(a^2+x^2)dx=1/2*x*sqrt(a^2+x^2)+1/2*a*a*log(fabs(x+sqrt(a*a+x*x)))+C求得弧长
    
    最后二分高度,求得答案
*/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
项目:使用 JavaScript 编写的杀死幽灵游戏(附源代码) 杀死鬼魂游戏是使用 Vanilla JavaScript、CSS 和 HTML 画布开发的简单项目。这款游戏很有趣。玩家必须触摸/杀死游荡的鬼魂才能得分。您必须将鼠标悬停在鬼魂上 - 尽量得分。鬼魂在眨眼间不断从一个地方移动到另一个地方。您必须在 1 分钟内尽可能多地杀死鬼魂。 游戏制作 这个游戏项目只是用 HTML 画布、CSS 和 JavaScript 编写的。说到这个游戏的特点,用户必须触摸/杀死游荡的幽灵才能得分。游戏会根据你杀死的幽灵数量来记录你的总分。你必须将鼠标悬停在幽灵上——尽量得分。你必须在 1 分钟内尽可能多地杀死幽灵。游戏还会显示最高排名分数,如果你成功击败它,该分数会在游戏结束屏幕上更新。 该游戏包含大量的 javascript 以确保游戏正常运行。 如何运行该项目? 要运行此游戏,您不需要任何类型的本地服务器,但需要浏览器。我们建议您使用现代浏览器,如 Google Chrome 和 Mozilla Firefox。要玩游戏,首先,单击 index.html 文件在浏览器中打开游戏。 演示: 该项目为国外大神项目,可以作为毕业设计的项目,也可以作为大作业项目,不用担心代码重复,设计重复等,如果需要对项目进行修改,需要具备一定基础知识。 注意:如果装有360等杀毒软件,可能会出现误报的情况,源码本身并无病毒,使用源码时可以关闭360,或者添加信任。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值