科学家小蓝来到了一个荒岛,准备对这个荒岛进行探测考察。 小蓝使用了一个超声定位设备来对自己进行定位。为了使用这个设备,小蓝需要在不同的点分别安装一个固定的发射器和一个固定的接收器。小蓝手中还有一个移

简介: 科学家小蓝来到了一个荒岛,准备对这个荒岛进行探测考察。 小蓝使用了一个超声定位设备来对自己进行定位。为了使用这个设备,小蓝需要在不同的点分别安装一个固定的发射器和一个固定的接收器。小蓝手中还有一个移

荒岛探测


题目描述


科学家小蓝来到了一个荒岛,准备对这个荒岛进行探测考察。

小蓝使用了一个超声定位设备来对自己进行定位。为了使用这个设备,小蓝需要在不同的点分别安装一个固定的发射器和一个固定的接收器。小蓝手中还有一个移动设备。定位设备需要从发射器发射一个信号到移动设备,移动设备收到后马上转发,最后由接收器接收,根据这些设备之间传递的时间差就能计算出移动设备距离发射器和接收器的两个距离,从而实现定位。


小蓝在两个位置已经安装了发射器和接收器,其中发射器安装在坐标 (xA, yA) ,接收器安装在坐标 (xB, yB)小蓝的发射器和接收器可能在岛上,也可能不在岛上。

小蓝的定位设备设计有些缺陷,当发射器到移动设备的距离加上移动设备到接收器的距离之和大于 L 时,定位设备工作不正常。当和小于等于 L 时,定位设备工作正常。为了安全,小蓝只在定位设备工作正常的区域探测考察。


已知荒岛是一个三角形,三个顶点的坐标分别为 (x1, y1), (x2, y2), (x3, y3)

请计算,小蓝在荒岛上可以探测到的面积有多大?


输入描述


输入的第一行包含五个整数,分别为xA, yA, xB, yB, L

第二行包含六个整数,分别为x1, y1, x2, y2, x3, y3

保证发射器的两个坐标不同,并且

-1000<=xA, yA, xB, yB , L, x1, y1, x2, y2, x3, y3<=1000


输出描述

输出一行,包含一个实数,四舍五入保留 2 位小数,表示答案。

考虑到计算中的误差,只要你的输出与参考输出相差不超过 0.01 即可。


输入输出样例


示例

输入

10 6 4 12 12

0 2 13 2 13 15


输出

39.99

样例说明


20210417132217973.png


运行限制 最大运行时间:1s 最大运行内存: 256M


C++


暴力算法,最后超时了5555


#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
int x1, y01, x2, y2, x3, y3, xA, yA, xB, yB, L;
double fxy(int a,int b ,double x)//求直线方程
{
    int X1 = 0, Y1 = 0, X2 = 0, Y2 = 0;
        switch (a)
        {
        case 1:X1 = x1; Y1 = y01; break;
        case 2:X1 = x2; Y1 = y2; break;
        case 3:X1 = x3; Y1 = y3; break;
        default:X1 = xA; Y1 = yA;
        }
        switch (b)
        {
        case 1:X2 = x1; Y2 = y01; break;
        case 2:X2 = x2; Y2 = y2; break;
        case 3:X2 = x3; Y2 = y3; break;
        default:X2 = xB; Y2 = yB;
        }
        return double(Y2 - Y1) / (X2 - X1)*(x - X1) + Y1;
}
bool island(double x,double y)//判断是否在三角形内
{
    return ((fxy(1, 2, x) - y)*(fxy(1, 3, x) - y) <= 0) + ((fxy(1, 2, x) - y)*(fxy(2, 3, x) - y) <= 0) + ((fxy(1, 3, x) - y)*(fxy(2, 3, x) - y) <= 0)>=2;
}
bool ellipse(double x,double y)//判断在椭圆内
{
    return sqrt((x - xA)*(x - xA) + (y - yA)*(y - yA)) + sqrt((x - xB)*(x - xB) + (y - yB)*(y - yB)) <= L;
}
int main()
{
    cin >> xA >> yA >> xB >> yB >> L;
    cin >> x1 >> y01 >> x2 >> y2 >> x3 >> y3;
    double x, y, cx, cy, S = 0;
    cx = (xA + xB) / 2.0;
    cy = (yA + yB) / 2.0;
    for (x = cx - L/2.0; x <= cx + L/2.0; x += 0.02)
        for (y = cy-L/2.0; y<=cy+L/2.0; y += 0.005)
            if (island(x, y)&& ellipse(x, y))
                S += 0.0001;
    printf("%.2f", S + 0.005);
    return 0;
}
相关文章
|
6月前
|
前端开发 芯片
【芯片前端】保持代码手感——不重叠序列检测
【芯片前端】保持代码手感——不重叠序列检测
|
12月前
|
数据采集 定位技术
巧用千寻位置GNSS软件| 一文教会横断面测量
选择目标线路,点击【确定】,如图 5.8-4所示,设置是否自动选择断面、计算方式、 放样间隔和横断面法线长度(道路中线到横断面边点的距离)。点击【确定】进入放样界 面,如图 5.8-5所示。当线路垂距小于 3米时,在横断面两侧生成平行线,进入精准定位。 根据箭头方向提示和下状态栏中垂距和平距提示移动当前点,当当前点位于横断面上时,根 据工程要求进行横断面数据采集和放样。也可以通过上下键切换到相邻的横断面。
巧用千寻位置GNSS软件| 一文教会横断面测量
|
定位技术 数据处理
巧用千寻位置GNSS软件| 直线放样有技巧
日常测量作业中,直线放样是对设计好的直线进行放样,其中包括直线的里程,左右偏距及设计直线范围内的高程控制。本文将介绍如何运用千寻位置GNSS软件完成日常的直线放样。
|
定位技术
巧用千寻位置GNSS软件|正确完成配置集和仪器设置
在使用千寻位置GNSS软件之前检查设备的配置集和仪器设置情况十分重要,列表中显示的是设备的配置集,里面涵盖了对接收机设备工作模式的各项设置。大多数情况下,我们使用默认的工作模式即可满足日常使用。
巧用千寻位置GNSS软件|正确完成配置集和仪器设置
|
机器学习/深度学习 存储 人工智能
用视频插帧开一个流体力学分析的外挂
阿里云提供的线上AI能力在处理视觉信息方面已经有较为成熟和通用的产品,其中视频插帧可以用于现有超高速相机增强,用于粒子测量PIV、BOS背景纹影等领域。本文为视觉流体力学分析预处理中间件的开发思路、技术架构设计和开发实战中参数的设置介绍,对一些数字影像的基础概念和阿里云视觉人工智能的API细节进行了分析。
353 0
用视频插帧开一个流体力学分析的外挂
|
存储
L2-028 秀恩爱分得快 (25 分)(模拟)
L2-028 秀恩爱分得快 (25 分)(模拟)
161 0
|
存储 算法 前端开发
太平洋大西洋水流问题如何解决?一文了解图在前端中的应用
在下面的这篇文章中,将讲解关于图的一些基础知识,以及图在前端中的常见应用。
太平洋大西洋水流问题如何解决?一文了解图在前端中的应用
|
机器人 C++
LeetCode 2087. 网格图中机器人回家的最小代价(脑筋急转弯)
LeetCode 2087. 网格图中机器人回家的最小代价(脑筋急转弯)
292 0
LeetCode 2087. 网格图中机器人回家的最小代价(脑筋急转弯)
|
编解码
遇到个别手机前置摄像头相差90度的怪事
今天有人提供了一个手机,说怎么视频角度总是不对。吾以为应用版本没有更新。安装之后一试,还是错误,总是跟别的手机相差90度。
124 0
|
人工智能 编解码 5G
“任意门”来了!全息投影瞬间转移身体,实时交互,还能“召回”去世亲友,售价40万
“任意门”来了!全息投影瞬间转移身体,实时交互,还能“召回”去世亲友,售价40万
365 0

热门文章

最新文章