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. 区间求mex的两种方法

    区间求mex的两种方法 1.莫队+分块/莫队+二分+树状数组 2.线段树 预处理1-i的sg值(用一个vis数组,一个cur指针) 预处理nxt数组(a[nxt[i]]=a[i]) 枚举左端点l, 考 ...

  2. java按行读取txt并按行写入

    IO流想必大家都很熟悉了,本次实现的需求是按行读取文件内容并且按行写入,代码如下: try { String encoding="utf-8"; //设定自己需要的字符编码集 Fi ...

  3. unity3d游戏无法部署到windows phone8手机上的解决方法

    今天搞了个unity3d游戏,准备部署到自己的lumia 920上,数据线连接正常,操作正常,但是“build”以后,始终无法部署到手机上,也没有在选择的目录下生产任何相关文件.(你的系统必须是win ...

  4. Android之标签选项卡

    TabWidget可以通过不同的标签进行切换并且显示不同的内容,相当于Button按钮实现不同的功能. TabHost的布局: (1):我们先在Layouts拖一个Vertical(纵向视图)的Lin ...

  5. C#_简单Excel导入

    引用程序集 Microsoft.Office.Core Microsoft.Office.Interop.Excel using System; using System.Collections.Ge ...

  6. centos6.5下磁盘分区及挂载

    1..查看磁盘空间 2.磁盘分区 3.格式化分区 4.挂载/卸载

  7. 接口(interface)

    接口(interface) 接口(interface)定义了一个可由类和结构实现的协定.接口可以包含方法.属性.事件和索引器.接口不提供它所定义的成员的实现-它仅指定实现该接口的类或结构必须提供的成员 ...

  8. 有道单词本添加js实现自动阅读单词

    个人比较习惯使用有道,使用了一段时间,背单词的时候很不方便   而有道单词客户Duan没有自动阅读的功能,  本菜用强大的js实现了简单的自动下一个单词的功能, 方法:第一步打开有道路径下的" ...

  9. sass最佳实践

    sass 变量 可以实现统一的布局,比如统一的内边距,统一的外边距,统一的颜色,统一的字号. 嵌套 可以根据组件的嵌套方式来嵌套css代码,方便收缩,查找.代码结构非常清晰,有利于以组件的方式开发 混 ...

  10. linux下golang的配置

    linux下golang的配置 之前开发golang一直在windows下,今天在linux下试了一下 ,遇到一些梗,比如go 找不到 sync包.花了一小时全部解决,把过程记录一下. 安装 go 我 ...