首页 > 其他分享 >题解:P2013 无线电测向

题解:P2013 无线电测向

时间:2024-10-27 17:13:35浏览次数:3  
标签:name double beacon1 beacon2 P2013 测向 题解 Ax tan

P2013 无线电测向

题目省流:求两条直线交点坐标

使用样例数据作出下图:

(图片来自@_MRCMRC_

图中红线和紫线为灯塔与船的连线,蓝线为船的航线。

由输入可以知道灯塔 A、B 相对于 \(x\) 正半轴的角度 \(\theta_A\)、\(\theta_B\)(逆时针方向) 和它们分别的坐标 \((x_A, y_A)\)、\((x_B, y_B)\)。

设灯塔 A 与船的连线为 \(l_1: y = k_Ax + b_A\),灯塔 B 与船的连线为 \(l_2: y = k_Bx + b_B\)。

我们用待定系数法,先用 \(\tan\) 求出 \(k_A\),有

\[k_A = \frac{\Delta y}{\Delta x} = \tan \theta_A \]

再代入 \(x = x_A, y = y_A\),解一元一次方程

\[y = k_Ax + b_A \]

\[\to y_A = k_Ax_A + b_A \]

\[\to b_A = y_A - k_Ax_A \]

所以得出 \(l_1\) 的表达式 \(y = k_Ax + b_A\)(这里 \(k_A\) 和 \(b_A\) 已求得)。

同理,我们可以求出 \(l_2\) 的表达式 \(y = k_Bx + b_B\),其中 \(k_B = \tan \theta_B\),\(b_B = y_B - k_Bx_B\)。

接下来求交点坐标,因为交点既在 \(l_1\) 上也在 \(l_2\) 上,所以联立两个表达式得出方程:

\[ \left\{ \begin{array}{ll} y = k_Ax + b_A \textcircled{1}\\ y = k_Bx + b_B \textcircled{2} \end{array} \right. \]

\(\textcircled{2} - \textcircled{1}\):

\[b_A - b_B = (k_B - k_A)x \]

解得

\[ \left\{ \begin{array}{ll} x = \frac{b_A - b_B}{k_B - k_A}\\ y = k_Ax + b_A \end{array} \right. \]

求得交点 \((x, y)\),即船的坐标。

还有记得转弧度制!!!

AC Code:

#include <bits/stdc++.h>

using namespace std;

const double pi = 3.1415926535;

struct beacon // 灯塔
{
    string name;
    double x, y;
};

int main()
{
    int n;
    cin >> n;
    beacon a[n];
    for (int i = 0; i < n; ++i)
    {
        cin >> a[i].name >> a[i].x >> a[i].y;
    }
    double ship_angle, angle1, angle2;
    beacon beacon1, beacon2;
    cin >> ship_angle >> beacon1.name >> angle1 >> beacon2.name >> angle2;
    for (int i = 0; i < n; ++i)
    {
        if (a[i].name == beacon1.name)
        {
            beacon1 = a[i];
        }
        if (a[i].name == beacon2.name)
        {
            beacon2 = a[i];
        }
    }
    angle1 += ship_angle;
    angle2 += ship_angle;

    double k1 = tan((90 - angle1) * pi / 180);
    double b1 = beacon1.y - k1 * beacon1.x;
    double k2 = tan((90 - angle2) * pi / 180);
    double b2 = beacon2.y - k2 * beacon2.x;

    double x = (b2 - b1) / (k1 - k2);
    double y = k1 * x + b1;
    printf("%.2lf %.2lf", x, y);
    return 0;
}

标签:name,double,beacon1,beacon2,P2013,测向,题解,Ax,tan
From: https://www.cnblogs.com/laialaodi/p/18508622

相关文章

  • DYN / 消防局的设立 / Spread of Information / 将军令 题解
    前言四倍经验:[POI2011]DYN-Dynamite;[HNOI2003]消防局的设立;[ARC116E]SpreadofInformation;将军令。题意简述给你一棵\(n\)个结点的树和点集\(S\),你要选出\(k\)个关键点\(T\),求\(\min\max\limits_{u\inS}\min\limits_{v\inT}\operatorname{dis}(u,v)\)......
  • CSP-J 2024 复赛题解
    T1数据仅有52,极小的数据范围导致这题只有一个问题:如何简短方便的去重并统计。我选择了map做法:每个输入查找map中之前是否记录过此元素,如果记录过则证明已经拥有这张牌,反之则记录并将统计数增加。代码如下:#include<bits/stdc++.h>usingnamespacestd;intn;map<stri......
  • Stema练习题:十四届蓝桥杯STEMA考试Python真题试卷题解
    来源:十四届蓝桥杯STEMA考试Python真题试卷第一套编程第四题这个程序虽然代码量不大,但综合运用了多种基础算法和数据结构:贪心策略选择窗口、模拟现实过程、线性查找最小值、效率高(时间复杂度为O(N)O(N)O(N))。题目描述:编程实现:某服务大厅同时开放3个窗口为客户办理......
  • Codeforces Round 982 div2 个人题解(A~D2)
    CodeforcesRound982div2个人题解(A~D2)Dashboard-CodeforcesRound982(Div.2)-Codeforces火车头#define_CRT_SECURE_NO_WARNINGS1#include<algorithm>#include<array>#include<bitset>#include<cmath>#include<cstdio>#in......
  • CF102354B Yet Another Convolution 题解
    题目描述给定长为\(n\)的数列\(a,b\),求数列\(c\)满足:\[c_k=\max_{\gcd(i,j)=k}|a_i-b_j|\\\]数据范围\(1\len\le10^5,1\lea_i,b_i\le10^9\)。时间限制\(\texttt{6s}\),空间限制\(\texttt{256MB}\)。分析别被题目名字带偏了,这道题跟卷积没有一点关系。如果......
  • 洛谷 P5738 【深基7.例4】歌唱比赛 C语言 题解
    题目描述n(n≤100)n(n≤100) 名同学参加歌唱比赛,并接受 m(m≤20)m(m≤20) 名评委的评分,评分范围是 00 到 1010 分。这名同学的得分就是这些评委给分中去掉一个最高分,去掉一个最低分,剩下 m−2m−2 个评分的平均数。请问得分最高的同学分数是多少?评分保留 22 位小数......
  • CSP-J 2024第二轮试题解析
    2024年10月26日,CSP-J/S2024第二轮认证圆满结束;这次入门组的比赛重点考察了模拟和动态规划算法,还涉及到字符串、贪心、前缀和等内容的考察,相比去年来说,对思维能力的考察更多。前两题比去年好做,第三题的部分分也比较好拿,但是第四题的难度明显比去年高,预计分数线会出现小幅提升。......
  • 如何利用递归和迭代构建二叉树?详解题解
    文章目录根据二叉树创建字符串思路代码二叉树的层序遍历思路代码二叉树的最近公共祖先思路代码二叉搜索树与双向链表思路代码从前序与中序遍历序列构造二叉树思路代码总结根据二叉树创建字符串题目:样例:可以看见,唯一特殊的就是左子树,当右子树存在的时候左......
  • 2024CSP-J题解附源码T1-T3
    T1#include<bits/stdc++.h>usingnamespacestd;///T1题解///输入行数n///输入n行,每行一个字符串,字符串只有两个字母组成,第一个字母是花色,第二个字母是点数。///一副牌只有52种组合,因为map能去重,所以用map进行统计不同组合数即mp.size()///结果为52-mp.size()map<string......
  • CF771A. Bear and Friendship Condition 题解 并查集
    题目链接:https://codeforces.com/problemset/problem/771/A视频讲解:https://www.bilibili.com/video/BV1tZ1FYPELp/?p=6题目大意:判断一个无向图中的每个连通块是否都是一个完全图。首先我们可以用并查集维护每个连通块的大小。其次,我们可以开一个\(cnt_i\)表示以节点\(i\)......