HDU 2438 Turn the corner 计算几何+三分

本文介绍了一种通过数学方法判断汽车是否能顺利通过直角弯的方法。该方法通过建立汽车左侧边界的方程来判断是否会碰到弯道内角,进而得出汽车能否成功转弯的结论。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题意:给你一个直角弯 宽度分别为x y 再给你一辆汽车 长和宽分别为 l w 问你这辆车能不能转过这个直角弯

思路:汽车能不能转过弯 只需看会不会碰到内角即可 至于能不能碰到内角 我们以汽车左边线建立方程 判断即可

#include <cstdio>
#include <cmath>
#include <cstdlib>
using namespace std;


const double eps = 1e-8;
const double PI = acos(-1.0);


double x, y, l, w;


double F(double a){
          return ( x - l * sin(a) - w / cos(a) )/ tan(a);
}


void solve(){
          double l = 0, r = PI / 2, m, mm;
          if(x - eps <= w || y - eps <= w){
          //这里需要注意 如果一开始汽车的宽度就大于等于路的宽度 就直接输出no
                    printf("no\n");
                    return;
          }
          while(l + eps < r){
                    m = (l + r) / 2;
                    mm = (m + r) / 2;
                    if(-F(m) > -F(mm)) r = mm;
                    else l = m;
          }
          if(-F(l) <= y ) printf("yes\n");
          else printf("no\n");
}


int main()
{
          while(~scanf("%lf%lf%lf%lf", &x, &y, &l, &w)) solve();
          return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值