51 nod 1298(计算几何)@
2017-04-15 10:50
211 查看
给出圆的圆心和半径,以及三角形的三个顶点,问圆同三角形是否相交。相交输出"Yes",否则输出"No"。(三角形的面积大于0)。
Input
Output
Input示例
Output示例
1)相交:
三角形三个点有在圆内的,也有在圆外的,必相交
三角形有一个顶点在圆上,必相交。
三角形三边都在圆外,圆心到三边距离,存在小于等于半径的,必相交
(2)不相交:
三角形三边都在圆内,必不相交
三角形三边都在圆外,且圆心到三边距离均大于半径,必不相交
点到直线的距离公式的七种推导方法
湖南省
黄爱民
赵长春
已知点
0
0
(
,
)
P
x
y
直线
:
0(
0,
0)
l
Ax
By
C
A
B
求点
P
到直线
l
的距离。
(因为
特殊直线很容易求距离,这里只讨论一般直线)
一、
定义法
证:根据定义,点
P
到直线
l
的距离是点
P
到直线
l
的垂线段的长,如图
1
,
设点
P
到直线
l
的垂线为
'
l
,垂足为
Q
,由
'
l
l
可知
'
l
的斜率为
B
A
'
l
的方程:
0
0
(
)
B
y
y
x
x
A
与
l
联立方程组
解得交点
2
2
0
0
0
0
2
2
2
2
(
,
)
B
x
ABy
AC
A
y
ABx
BC
Q
A
B
A
B
2
2
2
2
2
0
0
0
0
0
0
2
2
2
2
2
2
2
2
0
0
0
0
2
2
2
2
2
2
2
2
2
0
0
0
0
0
0
2
2
2
2
2
2
2
2
|
|
(
)
(
)
(
)
(
)
(
)
(
)
(
)
(
)
(
)
B
x
ABy
AC
A
y
ABx
BC
PQ
x
y
A
B
A
B
A
x
ABy
AC
B
y
ABx
BC
A
B
A
B
A
Ax
By
C
B
Ax
By
C
Ax
By
C
A
B
A
B
A
B
0
0
2
2
|
|
|
Ax
By
C
PQ
A
B
点到直线的距离公式的七种推导方法
湖南省
黄爱民
赵长春
已知点
0
0
(
,
)
P
x
y
直线
:
0(
0,
0)
l
Ax
By
C
A
B
求点
P
到直线
l
的距离。
(因为
特殊直线很容易求距离,这里只讨论一般直线)
一、
定义法
证:根据定义,点
P
到直线
l
的距离是点
P
到直线
l
的垂线段的长,如图
1
,
设点
P
到直线
l
的垂线为
'
l
,垂足为
Q
,由
'
l
l
可知
'
l
的斜率为
B
A
'
l
的方程:
0
0
(
)
B
y
y
x
x
A
与
l
联立方程组
解得交点
2
2
0
0
0
0
2
2
2
2
(
,
)
B
x
ABy
AC
A
y
ABx
BC
Q
A
B
A
B
2
2
2
2
2
0
0
0
0
0
0
2
2
2
2
2
2
2
2
0
0
0
0
2
2
2
2
2
2
2
2
2
0
0
0
0
0
0
2
2
2
2
2
2
2
2
|
|
(
)
(
)
(
)
(
)
(
)
(
)
(
)
(
)
(
)
B
x
ABy
AC
A
y
ABx
BC
PQ
x
y
A
B
A
B
A
x
ABy
AC
B
y
ABx
BC
A
B
A
B
A
Ax
By
C
B
Ax
By
C
Ax
By
C
A
B
A
B
A
B
0
0
2
2
|
|
|
Ax
By
C
PQ
A
B
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示例
2 0 0 10 10 0 15 0 15 5 0 0 10 0 0 5 0 5 5
Output示例
Yes No
#include <iostream> #include <bits/stdc++.h> using namespace std; const int N = 1e6+10; double eps=1e-8; typedef long long LL; struct node { double x, y; }p ; double dist(double x1, double y1, double x2, double y2) { return sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2)); } double zhuixian(double x,double y,double x1, double y1,double x2, double y2) { double a=y1-y2, b=x2-x1; double c=-(x1*a+y1*b); double xq=(b*b*x-a*b*y-a*c)/(a*a+b*b), yq=(a*a*y-a*b*x-b*c)/(a*a+b*b); double xmax=max(x1,x2), xmin=min(x1,x2), ymax=max(y1,y2), ymin=min(y1,y2); if(xq<xmin||xq>xmax||yq<ymin||yq>ymax) return -1; return fabs(a*x+b*y+c)/sqrt(a*a+b*b); } int main() { int t; scanf("%d", &t); while(t--) { double x, y, r, x1, y1, x2, y2; scanf("%lf %lf %lf", &x, &y, &r); for(int i=0;i<3;i++) scanf("%lf %lf", &p[i].x, &p[i].y); int flag=0; for(int i=0;i<3;i++) { for(int j=i+1;j<3;j++) { x1=p[i].x, y1=p[i].y, x2=p[j].x, y2=p[j].y; double dis1=dist(x,y,x1,y1), dis2=dist(x,y,x2,y2); double xmin=min(dis1,dis2), xmax=max(dis1,dis2); double tmp=zhuixian(x,y,x1,y1,x2,y2); if(tmp>0) xmin=tmp; if(xmin<=r&&xmax>=r) { flag=1; break; } } } if(flag) printf("Yes\n"); else printf("No\n"); } return 0; }
1)相交:
三角形三个点有在圆内的,也有在圆外的,必相交
三角形有一个顶点在圆上,必相交。
三角形三边都在圆外,圆心到三边距离,存在小于等于半径的,必相交
(2)不相交:
三角形三边都在圆内,必不相交
三角形三边都在圆外,且圆心到三边距离均大于半径,必不相交
点到直线的距离公式的七种推导方法
湖南省
黄爱民
赵长春
已知点
0
0
(
,
)
P
x
y
直线
:
0(
0,
0)
l
Ax
By
C
A
B
求点
P
到直线
l
的距离。
(因为
特殊直线很容易求距离,这里只讨论一般直线)
一、
定义法
证:根据定义,点
P
到直线
l
的距离是点
P
到直线
l
的垂线段的长,如图
1
,
设点
P
到直线
l
的垂线为
'
l
,垂足为
Q
,由
'
l
l
可知
'
l
的斜率为
B
A
'
l
的方程:
0
0
(
)
B
y
y
x
x
A
与
l
联立方程组
解得交点
2
2
0
0
0
0
2
2
2
2
(
,
)
B
x
ABy
AC
A
y
ABx
BC
Q
A
B
A
B
2
2
2
2
2
0
0
0
0
0
0
2
2
2
2
2
2
2
2
0
0
0
0
2
2
2
2
2
2
2
2
2
0
0
0
0
0
0
2
2
2
2
2
2
2
2
|
|
(
)
(
)
(
)
(
)
(
)
(
)
(
)
(
)
(
)
B
x
ABy
AC
A
y
ABx
BC
PQ
x
y
A
B
A
B
A
x
ABy
AC
B
y
ABx
BC
A
B
A
B
A
Ax
By
C
B
Ax
By
C
Ax
By
C
A
B
A
B
A
B
0
0
2
2
|
|
|
Ax
By
C
PQ
A
B
点到直线的距离公式的七种推导方法
湖南省
黄爱民
赵长春
已知点
0
0
(
,
)
P
x
y
直线
:
0(
0,
0)
l
Ax
By
C
A
B
求点
P
到直线
l
的距离。
(因为
特殊直线很容易求距离,这里只讨论一般直线)
一、
定义法
证:根据定义,点
P
到直线
l
的距离是点
P
到直线
l
的垂线段的长,如图
1
,
设点
P
到直线
l
的垂线为
'
l
,垂足为
Q
,由
'
l
l
可知
'
l
的斜率为
B
A
'
l
的方程:
0
0
(
)
B
y
y
x
x
A
与
l
联立方程组
解得交点
2
2
0
0
0
0
2
2
2
2
(
,
)
B
x
ABy
AC
A
y
ABx
BC
Q
A
B
A
B
2
2
2
2
2
0
0
0
0
0
0
2
2
2
2
2
2
2
2
0
0
0
0
2
2
2
2
2
2
2
2
2
0
0
0
0
0
0
2
2
2
2
2
2
2
2
|
|
(
)
(
)
(
)
(
)
(
)
(
)
(
)
(
)
(
)
B
x
ABy
AC
A
y
ABx
BC
PQ
x
y
A
B
A
B
A
x
ABy
AC
B
y
ABx
BC
A
B
A
B
A
Ax
By
C
B
Ax
By
C
Ax
By
C
A
B
A
B
A
B
0
0
2
2
|
|
|
Ax
By
C
PQ
A
B
相关文章推荐
- 51 Nod 1265 四点共面 (计算几何)
- 51 nod 1298 圆与三角形 【计算几何】
- 1298 圆与三角形(计算几何)
- 51 nod: 1298 圆与三角形
- 【codevs1298】凸包周长,计算几何
- 51Nod 1298:圆与三角形(计算几何)
- 51nod 1298 圆与三角形(计算几何)
- 51nod 1298:圆与三角形(计算几何)
- CodeVS1298 凸包周长 解题报告【计算几何】【凸包】
- 51nod 1298 圆与三角形 (计算几何)
- 51nod 1298 圆与三角形(基础题,计算几何)
- 51Nod 1298 圆与三角形 (计算几何)
- 51nod--1298 (计算几何基础)
- 【51Nod】1298 - 圆与三角形(计算几何)
- 51nod 1298 圆与三角形(计算几何)
- 计算几何(转)
- POj 2002 UVALive - 3047 C - Squares 【计算几何+二分求解】
- Poj 1556 The Doors 计算几何+最短路
- 【计算几何】CDOJ1720 几何几何
- 计算几何算法概览