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. 关于VIM统计命令

    都是冒号命令哈::%s/./&/gn        统计字符数:%s/\i\+/&/gn    统计单词数:%s/^//n           统计行数:%s/keyword/& ...

  2. cogs 餐巾 461(贪心)

    /*虽然这暴力剪了又剪 改了又改 还是初始的20分...*/ #include<iostream> #include<cstdio> #include<cstring&g ...

  3. HDOJ2008数值统计

    数值统计 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submis ...

  4. 关于WIFI的工作模式--AP MODE/STATION MODE

    wifi的concurrent mode 所谓wifi的共存模式,有以下几种: station mode + station mode station mode + ap mode station m ...

  5. Android之屏幕测试

    MainActivity: package com.example.touchscreentest; import android.os.Bundle; import android.R.layout ...

  6. Java Mail发送简单邮件,完整代码

    依赖javax.mail.jar,地址:https://java.net/projects/javamail/pages/Home 完整示例代码如下: package com.jadic.utils; ...

  7. 第三十一篇、iOS 9版本适配

    1.网络适配(强制回退HTTP) 为了强制增强数据访问安全, iOS9 默认会把 所有的http请求 所有从NSURLConnection . CFURL . NSURLSession发出的 HTTP ...

  8. echarts标准饼图解读(一)——提示框(tooltip)配置

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  9. FreeCodeCamp-JS基础部分

    ---恢复内容开始--- .pop()     将数组末尾的元素移除     var removedFromMyArray=myArray.pop()     将myArray数组的最后一个元素移除并 ...

  10. javascript笔记——图片大小检测

    <html> <head> <script type="text/javascript"> var isIE = /msie/i.test(na ...