码迷,mamicode.com
首页 > 其他好文 > 详细

POJ 1673 EXOCENTER OF A TRIANGLE

时间:2015-02-28 08:55:41      阅读:129      评论:0      收藏:0      [点我收藏+]

标签:计算几何

这道题就是求点的时候麻烦了点,思路还是很简单的

刚开始把向量反向写成了swap(x,y),其实应该是x=-x,y=-y

#include<stdio.h>
#include<math.h>
#include<algorithm>
using namespace std;
const double eps=1e-8;
struct Point {
    double x,y;
    Point(){}
    Point(double xx,double yy){x=xx;y=yy;}
    Point operator+(Point b){return Point(x+b.x,y+b.y);}
    double operator^(const Point b)const{
        return x*b.y-y*b.x;
    }
    Point operator-(Point b){return Point(x-b.x,y-b.y);}
};
struct Line {
    Point s,e;
    Line(){};
    Line(Point ss,Point ee){s=ss;e=ee;}
    Point operator &(Line b){
        Point res=s;
        double t=((s-b.e)^(b.s-b.e))/((s-e)^(b.s-b.e));
        res.x+=(e.x-s.x)*t;
        res.y+=(e.y-s.y)*t;
        return res;
    }
};
double xmul(Point p0,Point p1,Point p2){
    return (p1.x-p0.x)*(p2.y-p0.y)-(p2.x-p0.x)*(p1.y-p0.y);
}
double dist(Point a,Point b){
    return sqrt((b.x-a.x)*(b.x-a.x)+(b.y-a.y)*(b.y-a.y));
}
Point getPoint(Point a,Point b,Point c){
    Point q;
    q=Point(-(b.y-a.y),b.x-a.x);
    if(xmul(a,b,c)>eps) {
        q.x=-q.x;
        q.y=-q.y;
    }
    double d=dist(a,b);
    q.x*=d/sqrt(q.x*q.x+q.y*q.y);
    q.y*=d/sqrt(q.x*q.x+q.y*q.y);

    q.x=a.x+q.x;
    q.y=a.y+q.y;

    return q;
}

Point p[3];
int main(){
#ifndef ONLINE_JUDGE
freopen("in.txt","r",stdin);
#endif // ONLINE_JUDGE
    int n;
    scanf("%d",&n);
    for(int i=0;i<n;i++){
        scanf("%lf%lf%lf%lf%lf%lf",&p[0].x,&p[0].y,&p[1].x,&p[1].y,&p[2].x,&p[2].y);
        Point c,d,r,q;
        c=getPoint(p[0],p[1],p[2]);
        d=getPoint(p[0],p[2],p[1]);
        r=Point((c.x+d.x)/2,(c.y+d.y)/2);

        c=getPoint(p[1],p[2],p[0]);
        d=getPoint(p[1],p[0],p[2]);
        q=Point((c.x+d.x)/2,(c.y+d.y)/2);

        Point o;
        o=Line(p[0],r)&Line(p[1],q);
        printf("%.4f %.4f\n",o.x,o.y);
    }
    return 0;
}


POJ 1673 EXOCENTER OF A TRIANGLE

标签:计算几何

原文地址:http://blog.csdn.net/lj94093/article/details/43974587

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!