D Mocha and Railgun

这篇博客探讨了如何解决一个几何与编程相结合的问题:在一个给定半径的圆内,找到以某点为中点的线段旋转时,垂直于该线段的最大弧长。通过分析线段的特殊位置,确定了当线段垂直于中点与圆心连线时,弦长最大。博主使用了三角函数和弧度制来计算最大弧长,并给出了C++代码实现。
摘要由CSDN通过智能技术生成

在这里插入图片描述
在这里插入图片描述
题意 :

  • 给定一个圆心在原点的原,再给圆内一点,是一个严格在圆内的线段的中点,这个线段可以绕着这个中点任意旋转,垂直于这个线段向圆发射光波,求最大弧长

思路 :

  • 考虑两种特殊位置:线段垂直于中点与圆心的连线;线段平行于中点与圆心的连线
  • 要想弧长最大,就要弦长最大,画图后发现,垂直的情况下,弦长等于线段的长度;平行的情况下,弧长是斜边,必然大于线段的长度
  • 弧长与角度的对应关系,弧长等于角度乘以半径
  • 角度 ans = 90度 - a - b,这个90度是不好处理的,因此将它和-a合在一起
#include <iostream>
#include <cmath>
using namespace std;

int main() {
    int _; cin >> _;
    while (_ -- ) {
        double r, x, y, d;
        cin >> r >> x >> y >> d;
        double L = sqrt(x * x + y * y);
        double a = asin((L + d) / r);
        double b = asin((L - d) / r);
        printf("%.6lf\n", (a - b) * r);
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值