51nod1298 圆与三角形




第1行:一个数T,表示输入的测试数量(1 <= T <= 10000),之后每4行用来描述一组测试数据。
4-1:三个数,前两个数为圆心的坐标xc, yc,第3个数为圆的半径R。(-3000 <= xc, yc <= 3000, 1 <= R <= 3000)
4-2:2个数,三角形第1个点的坐标。
4-3:2个数,三角形第2个点的坐标。
4-4:2个数,三角形第3个点的坐标。(-3000 <= xi, yi <= 3000)
共T行,对于每组输入数据,相交输出"Yes",否则输出"No"。
2
0 0 10
10 0
15 0
15 5
0 0 10
0 0
5 0
5 5
Yes
No
题意:中文题
思路:判断三角形是否与圆内相交,逆向思维考虑三角形与圆不相交的情况:
- 三角形在圆内
- 三角形全部在圆外,此时考虑任意一条三角形的边与圆相交即可成立,否则不相交
#include <iostream>
#include<stdio.h>
#include<string.h>
using namespace std;
typedef long long ll;
typedef struct
{
ll x,y;
}point;
point A,B,C,O;
ll r;
ll distance(point *p1,point *p2)//两点之间距离的平方
{
return (p1->x-p2->x)*(p1->x-p2->x)+(p1->y-p2->y)*(p1->y-p2->y);
}
int pan_duan(point *p1,point *p2)
{
ll a,b,c,dist1,dist2,angle1,angle2;//ax+by+c=0;
if(p1->x==p2->x)
a=1,b=0,c=-p1->x;//特殊情况判断,分母不能为零
else if(p1->y==p2->y)
a=0,b=1,c=-p1->y;//特殊情况判断,分母不能为零
else
{
a=p1->y-p2->y;
b=p2->x-p1->x;
c=p1->x*p2->y-p1->y*p2->x;
}
dist1=a*O.x+b*O.y+c;
dist1*=dist1;
dist2=(a*a+b*b)*r*r;
if(dist1>dist2)return 0;//点到直线距离大于半径
angle1=(O.x-p1->x)*(p2->x-p1->x)+(O.y-p1->y)*(p2->y-p1->y);
angle2=(O.x-p2->x)*(p1->x-p2->x)+(O.y-p2->y)*(p1->y-p2->y);
if(angle1>0&&angle2>0)return 1;
return 0;
}
//判断是否相交,相交返回1,不相交返回0
int intersect()
{
ll distA=distance(&O,&A);//OA^2
ll distB=distance(&O,&B);//OB^2
ll distC=distance(&O,&C);//OC^2
ll r2=r*r;
if(distA<r2&&distB<r2&&distC<r2)//圆包含三角形
return 0;
else if(distA>r2&&distB>r2&&distC>r2)//三点都在圆外
{
return pan_duan(&A,&B)||pan_duan(&A,&C)||pan_duan(&B,&C);
}
return 1;
}
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
scanf("%lld%lld%lld%lld%lld%lld%lld%lld%lld",&O.x,&O.y,&r,&A.x,&A.y,&B.x,&B.y,&C.x,&C.y);
printf("%s\n",intersect()?"Yes":"No");
}
}
51nod1298 圆与三角形的更多相关文章
- (点到线段的最短距离)51nod1298 圆与三角形
1298 圆与三角形 给出圆的圆心和半径,以及三角形的三个顶点,问圆同三角形是否相交.相交输出"Yes",否则输出"No".(三角形的面积大于0). 收起 ...
- 51nod-1298 圆与三角形(计算几何超详解)
题目链接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1298 给出圆的圆心和半径,以及三角形的三个顶点,问圆同三角形是 ...
- 51nod1298圆与三角形——(二分法)
1298 圆与三角形 题目来源: HackerRank 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 收藏 关注 给出圆的圆心和半径,以及三角形的三个顶点,问圆同 ...
- 51nod_1298:圆与三角形(计算几何)
题目链接 判断圆和三角形是否相交 可以转化为 判断三条线段是否和圆相交 #include<iostream> #include<cstdio> #include< ...
- 51Nod 1298 圆与三角形(计算几何)
1298 圆与三角形 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 给出圆的圆心和半径,以及三角形的三个顶点,问圆同三角形是否相交.相交输出"Yes&quo ...
- 51nod 1298 圆与三角形
给出圆的圆心和半径,以及三角形的三个顶点,问圆同三角形是否相交.相交输出"Yes",否则输出"No".(三角形的面积大于0). 输入 第1行:一个数 ...
- 牛客网 牛客小白月赛1 E.圆与三角形-公式题
E.圆与三角形 链接:https://www.nowcoder.com/acm/contest/85/E来源:牛客网 这个题把公式推一下, 发现就是1+sinA*r,sinA最大为1,所以 ...
- (图论)51NOD 1298 圆与三角形
给出圆的圆心和半径,以及三角形的三个顶点,问圆同三角形是否相交.相交输出"Yes",否则输出"No".(三角形的面积大于0). 输入 第1行:一个数T, ...
- 51Nod 圆与三角形
给出圆的圆心和半径,以及三角形的三个顶点,问圆同三角形是否相交.相交输出"Yes",否则输出"No".(三角形的面积大于0). Input 第1行:一个数T ...
随机推荐
- poj——1470 Closest Common Ancestors
Closest Common Ancestors Time Limit: 2000MS Memory Limit: 10000K Total Submissions: 20804 Accept ...
- OCP知识点讲解 之 队列、资源与锁:RHCA|OCM|CCIE RedHat大中华地区前50位RHCA系统架构师:叶绍琛
一.队列与共享资源 共享资源可以被多个会话.进程同时访问,因此它的访问需要保护.Oracle中,除了PGA,所有的东西(包括内存.磁盘.CPU.表.索引.事务等等,种类太多,一概用东西两字来代表) ...
- 如何启动/关闭weblogic
听语音 | 浏览:7107 | 更新:2014-12-25 15:43 1 2 3 4 5 6 分步阅读 最近用到weblogic 给大家分享一下如何启动和关闭weblogic 工具/原料 电脑 ...
- 第三课 MongoDB 数据更新
1.课程大纲 本课程主要解说 MongoDB 数据更新的相关内容.包含文档插入 insert 函数.文档删除 remove函数以及文档更新update函数的基本使用.除此之外.还会介绍 MongoDB ...
- 小贝_mysql 存储过程
存储过程 简要: 1.什么是存储过程 2.使用存储过程 一.存储过程 概念类似于函数,就是把一段代码封装起来.当要行这段代码的时候,能够通过调用该存储过程来实现.在封装的语句体里面.能够用if/els ...
- android中单元測试中的断言assert的使用与扩展
首先看一组对照,比方说我们要測试的结果是一个Linearlaout AssertJ Android: assertThat(layout).isVisible() .isVertical() .has ...
- 安装eclipse中html/jsp/xml editor插件以及改动html页面的字体
近期在做android项目,用到了jquery mobile 框架以及phonegap,所以就会涉及一些html文件,可是html文件打开的方式是Text Editor ,而且打开之后一些html代码 ...
- Jenkins performance插件生成性能测试报告【待完成】
https://segmentfault.com/a/1190000018651092 本地window运行 命令执行:F:\study\apache-jmeter-4.0\apache-jmeter ...
- JSON入门指南
JSON 即 JavaScript Object Natation,它是一种轻量级的数据交换格式,很适合于server与 JavaScript 的交互.本文将高速解说 JSON 格式.并通过代码演示样 ...
- OSX:不同OSX版本号的标记可能不兼容
现象: 依据測试,中文OS X 10.9和中文10.10的文件标记彼此不兼容. 也就是说.比方在10.9中的颜色标记,在10.10DP2中不能删除,但能够加入/删除10.10自己的颜色标记,反之亦然. ...