http://www.bnuoj.com/bnuoj/problem_show.php?pid=27874

【题意】:

给你一个三角形三个顶点的坐标ABC,三角形各边取一点DEF,将三角形周长平均分割成两部分,求AE,DC,FB是否相交于一点,是,输出交点坐标,否,输出ERROR

【题解】:

几何体,一看就有点慌,就怕它卡精度,以前坑怕了,这里给出思路以及解题过程:

先求出DEF的坐标再说,拿D举例:

D在AB线段上,并满足AC+AD==DB+BC,这里我们可以用二分枚举来枚举出D的坐标

EF点同上

然后,CD与AE的交点O,判断O是不是也同时在BF上,在输出O的坐标,不在输出ERROR

【ACcode】:

 #include <iostream>
#include <string.h>
#include <stdio.h>
#include <math.h>
#include <algorithm> using namespace std;
#define eps 1e-12 struct Nod
{
double x,y;
Nod(double dx,double dy)
{
x=dx;
y=dy;
}
Nod(){}
}node[],tp; double dis[];
double x[],y[];
double xx[],yy[]; double distance(int i)
{
return sqrt((x[i]-x[i+])*(x[i]-x[i+])+(y[i]-y[i+])*(y[i]-y[i+]));
} double distance(double x1,double y1,double x2,double y2)
{
return sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1));
} Nod bs(int i) //二分
{
double l=,r=,mid;
double tx,ty;
double len1 = dis[i+];
double len2 = dis[i+];
while(l<=r)
{
mid=(l+r)/;
tx=x[i]+mid*(x[i+]-x[i]);
ty=y[i]+mid*(y[i+]-y[i]);
double temp1 = distance(tx,ty,x[i],y[i]);
double temp2 = distance(tx,ty,x[i+],y[i+]);
if(len1+temp1<len2+temp2)
{
l=mid+eps;
}
else
{
r=mid-eps;
}
}
return Nod(tx,ty);
} Nod getPoint(Nod u1,Nod u2,Nod v1,Nod v2) //已知线段已经有交点,求交点坐标
{
Nod ret=u1;
double t=((u1.x-v1.x)*(v1.y-v2.y)-(u1.y-v1.y)*(v1.x-v2.x))
/((u1.x-u2.x)*(v1.y-v2.y)-(u1.y-u2.y)*(v1.x-v2.x));
ret.x+=(u2.x-u1.x)*t;
ret.y+=(u2.y-u1.y)*t;
return ret;
} int main()
{
int t,cas=;
scanf("%d",&t);
while(t--)
{
int i;
for(i=;i<;i++)
{
scanf("%lf%lf",&x[i],&y[i]);
x[i+]=x[i]; //做成循环,后面可以统一处理
y[i+]=y[i];
}
for(i=;i<;i++)
{
dis[i+]=dis[i]=distance(i);
}
for(i=;i<;i++)
{
node[i+]=node[i] = bs(i); //这里用二分来获取,周长分割中点
}
tp=getPoint(node[],Nod(x[],y[]),node[],Nod(x[],y[])); //得到两条线段的交点
double dis1 = distance(node[].x,node[].y,x[],y[]); //第三条线段的长度
double dis2 = distance(node[].x,node[].y,tp.x,tp.y)+distance(tp.x,tp.y,x[],y[]); //交点到第三条线段端点之和
printf("Case %d: ",cas++);
if(fabs(dis1-dis2)>=1e-) //判断距离是否相等
{
printf("ERROR\n");
}
else
{
if(fabs(tp.x)<1e-) tp.x=; //是否为-0
if(fabs(tp.y)<1e-) tp.y=;
printf("%.6lf %.6lf\n",tp.x,tp.y);
}
}
return ;
}

bnuoj 27874 "Center" of [p]erimeter midpoints(计算几何)的更多相关文章

  1. hdu 2105:The Center of Gravity(计算几何,求三角形重心)

    The Center of Gravity Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Ot ...

  2. fzu 1330:Center of Gravity(计算几何,求扇形重心)

    Problem 1330 Center of Gravity Accept: 443    Submit: 830Time Limit: 1000 mSec    Memory Limit : 327 ...

  3. bnuoj 4209 Triangle(计算几何)

    http://www.bnuoj.com/bnuoj/problem_show.php?pid=4209 题意:如题 题解:公式直接计算,或者角平分线求交点 [code1]: #include < ...

  4. bnuoj 1053 EASY Problem (计算几何)

    http://www.bnuoj.com/bnuoj/problem_show.php?pid=1053 [题意]:基本上就是求直线与圆的交点坐标 [题解]:这种题我都比较喜欢用二分,三分做,果然可以 ...

  5. UVALIVE 5893 计算几何+搜索

    题意:很复杂的题意,我描述不清楚. 题目链接:http://acm.bnu.edu.cn/bnuoj/contest_show.php?cid=3033#problem/33526 大致是,给定一个起 ...

  6. UVA12304 2D Geometry 110 in 1! 计算几何

    计算几何: 堆几何模版就能够了. . .. Description Problem E 2D Geometry 110 in 1! This is a collection of 110 (in bi ...

  7. HDU 5572 An Easy Physics Problem (计算几何+对称点模板)

    HDU 5572 An Easy Physics Problem (计算几何) 题目链接http://acm.hdu.edu.cn/showproblem.php?pid=5572 Descripti ...

  8. POJ 2031 Building a Space Station (计算几何+最小生成树)

    题目: Description You are a member of the space station engineering team, and are assigned a task in t ...

  9. 【kuangbin】计算几何部分最新模板

    二维几何部分 // `计算几何模板` ; const double inf = 1e20; const double pi = acos(-1.0); ; //`Compares a double t ...

随机推荐

  1. js如何判断一个数组中是否有重复的值

    引自:http://bbs.tianya.cn/post-414-38497-1.shtml 方法一: var ary = new Array("111","22&quo ...

  2. 在Ubuntu系统中解压rar和zip文件的方法

    大家在以前的windows系统中会存有很多rar和zip格式的压缩文件,Ubuntu系统默认情况下对这些文件的支持不是很好,如果直接用"归档管理器"打开会提示错误,因此今天跟大家分 ...

  3. Annotation注解与butterknife

    注解分为三种,一般来讲我们使用的是运行时会加载及能够反射读取的注解类型, 其他编译器生效的类型和编译后放入类文件而运行期不能加载解析的对我们没啥用. 所以从普通理解上来看,注解要配合着反射用就好了. ...

  4. App推广干货,排名数据分析优化效果

    出处: App盈利交流论坛        2015年3月份,在百度上了一款赛车类游戏(不说什么名字了怕被打包),后台起名叫002,刚开始上的时候一天只有几元钱,但是游戏还是倾注了不少心血的,觉得不甘心 ...

  5. css3学习笔记之渐变

    CSS3 线性渐变 语法 background: linear-gradient(direction, color-stop1, color-stop2, ...); 1 2 3 4 5 6 7 8 ...

  6. 第一个MapReduce程序

    计算文件中每个单词的频数 wordcount 程序调用 wordmap 和 wordreduce 程序. import org.apache.hadoop.conf.Configuration; im ...

  7. MQ队列

    显示队列名dspmq 打开队列 runmqsc QMSAA 200-远程队列 dis qr(*) 显示所有队列 dis qr(saa_to_cips) all 显示队列参数 20-本地队列 查看队列深 ...

  8. L002-oldboy-mysql-dba-lesson02

            L002-oldboy-mysql-dba-lesson02 [root@web01 ~]# mysql -uroot -ptestpassword mysql> use mys ...

  9. myeclipse 8.5 破解

    步骤: (1)新建一个java project项目 (2)在src目录下新建一个名为MyEclipseGen的Java文件(MyEclipseGen.java) (3)MyEclipseGen.jav ...

  10. CentOs7&zookeeper

    下载安装包 wget http://www.apache.dataguru.cn/zookeeper/stable/zookeeper-3.4.6.tar.gz 解压 tar xzvf zookeep ...