首页 > 其他分享 >51nod 1298 圆与三角形(基础题,计算几何)

51nod 1298 圆与三角形(基础题,计算几何)

时间:2023-06-02 18:36:42浏览次数:56  
标签:lf% return point 51nod double 1298 lenth mp 三角形


题目链接:点击打开链接



1298 圆与三角形



题目来源:  HackerRank


基准时间限制:1 秒 空间限制:131072 KB 分值: 0  难度:基础


给出圆的圆心和半径,以及三角形的三个顶点,问圆同三角形是否相交。相交输出"Yes",否则输出"No"。(三角形的面积大于0)。





Input


第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)


Output


共T行,对于每组输入数据,相交输出"Yes",否则输出"No"。


Input示例


20 0 1010 015 0 15 5 0 0 10 0 0 5 0 5 5


Output示例


YesNo




分析:

这题看似是一道简单的几何问题,然而,用代码实现时重重险阻!

好不容易示例过了,20组测试数据,竟然过了19个!!!!!!!!,那一个就是过不了!!


然后重写了判断函数,终于过了,泪奔




代码:

#include<stdio.h>
#include<stdlib.h>
#include<math.h>
struct point{
	double x,y;
}o,a,b,c;
double r;
double fork(point o,point m,point n)//向量om,on叉乘 
{
	m.x-=o.x;
	m.y-=o.y;
	n.x-=o.x;
	n.y-=o.y;
	return m.x*n.y-m.y*n.x;
}
double lenth(point m,point n)//点m,n的距离 
{
	return sqrt((m.x-n.x)*(m.x-n.x)+(m.y-n.y)*(m.y-n.y));
}
double h(point o,point m,point p)//o到mp的最近距离
{
	double len_mp=lenth(m,p);
	point t_mp={(p.x-m.x),(p.y-m.y)};//向量mp
	double m1=o.x+10000;//假设向量ok的大小。之前用的100,有数据过不了,改成10000就过了 
	double n1=-((t_mp.x*m1)/t_mp.y);
	point t_ok={m1,n1};//向量ok 
	
	//下面利用叉乘判断最近距离的垂点是否在线段上
	if(fork({0,0},t_ok,{p.x-o.x,p.y-o.y})*fork({0,0},t_ok,{m.x-o.x,m.y-o.y})>0)
	{
		return lenth(o,m)<lenth(o,p)?lenth(o,m):lenth(o,p);
	}
	double s=fabs(fork(o,m,p));//平行四边形面积 
	return s/len_mp;
}

int check()
{
	if(r==lenth(o,a)||r==lenth(o,b)||r==lenth(o,c))//有顶点在圆上 
		return 1;
	if(r>lenth(o,a)||r>lenth(o,b)||r>lenth(o,c))//在圆内有顶点
	{
		if(r>lenth(o,a)&&r>lenth(o,b)&&r>lenth(o,c))//都在圆内
			return 0;
		return 1;//在圆外也有 
	} 
	//剩下的情况,都在外部,只要线段距离圆心大于R,就无交点
	if(h(o,a,b)>r&&h(o,c,b)>r&&h(o,a,c)>r)
		return 0;
	return 1;//否则有交点 
	
}
int main()
{
	int T;	
	scanf("%d",&T);
	while(T--)
	{
		scanf("%lf%lf%lf",&o.x,&o.y,&r);
		scanf("%lf%lf",&a.x,&a.y);
		scanf("%lf%lf",&b.x,&b.y);
		scanf("%lf%lf",&c.x,&c.y);
		if(check())
			puts("Yes");
		else
			puts("No");
	}
	return 0;
}










标签:lf%,return,point,51nod,double,1298,lenth,mp,三角形
From: https://blog.51cto.com/u_16125110/6404532

相关文章

  • 最大子矩阵和问题 动态规划 51nod1051
    1051 最大子矩阵和基准时间限制:2 秒空间限制:131072 KB分值: 40 难度:4级算法题例如:3*3的矩阵:-13-12-13-312和最大的子矩阵是:3-1-1312Input......
  • CSS---写三角形
    我们在做项目开发的时候,经常会遇到需要三角小按钮,如果不引入图片和字体,其实用样式也是可以写处理的。具体示例:.div{width:50px;height:50px;border-left:50pxsolidred;border-right:50pxsolidyellow;border-top:50pxsolidblue;border-bottom:50pxsolidgreen......
  • java 打印个三角形
    publicclassImoocStudent{publicstaticvoidmain(String[]args)throwsException{intline=9;for(inti=1;i<=line;i++){for(intk=0;k<line-i;k++){System.out.print("");......
  • 肖sir__现场笔试__三角形测试用例和网络设备通信(杭州)
    =======================================  设备A:- IP地址: 192.168.1.2- 子网掩码: 255.255.255.0- 网关: 192.168.1.1设备B:- IP地址: 192.168.2.2- 子网掩码: 255.255.255.0- 网关: 192.168.2.1端口A(连接设备A):- IP地址: 192.168.1.1- 子网掩码: 255.25......
  • HDU3662(求三维凸包表面的多边形个数,表面三角形个数,体积,表面积,凸包重心,凸包中点到面
    题目:3DConvexHull题意:给定空间中的n个点,求这n个点形成的凸包的表面的多边形个数。增量法求解:首先任选4个点形成的一个四面体,然后每次新加一个点,分两种情况:1>在凸包内,则可以跳过2>在凸包外,找到从这个点可以"看见"的面S(看不看得见可以用法向量,看点是否在面外侧),删除这些......
  • NJUST1712(形成三角形面积为整数的个数)
    题目:1712-Triangles 题意:给定三角形的三点,分别是A,B,C,它们的横纵坐标都属于整数,然后给定两个数n和m。要求满足:, 和这3个条件的三角形个数,并且对1000000007取余。 分析:由于用的是坐标,那么我们很容易想到用叉积来表示面积,那么就得到:   然后就可以很明显知道:与一奇一偶。 然......
  • 51nod---无法表示的数
    题目:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1176题意:z=(x/2)取整后+y+xy,x,y都是大于0的整数。即:x,y取不同的数,z可能有多种表示方式,也可能一种都没有,比如3,15就无法用任何x,y来表示。现在将所有无法表示的数排个序,组成一个序列S,给出一个整数n,你来求S[n......
  • 每一个正整数可以表示为3个三角形数之和
    题目:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=5231 题意:给定一个正整数,其中,把用最少的三角形数之和来表示,输出它们。分析:有一个定理每一个正整数可以表示为3个三角形数之和,所以这样我们可以先判断是否是一个三角形数,如    果是,则直接输出,否则判断是否是......
  • 【230531-1】RT三角形ACB中,AC垂直BC,AB=4,CD=2,角ABC=20°,角BCD=40°。求:角CBD度数?
    ......
  • OpenGL三角形
    先了解一下一些基础概念图形渲染管线(graphicspipeline)指一堆图形数据输入到一个管道中,经过管道中一些列的处理后将结果展现到屏幕上的过程简单来说可以认为有以下过程,每个阶段的输出都是下一个阶段的输入顶点数据输入————就是输入一些顶点的位置数据,如三角形的顶点之......