UVa 11437 - Triangle Fun

来源:互联网 发布:游戏手柄软件下载 编辑:程序博客网 时间:2024/05/23 01:23

该学一下用向量求交点坐标了。

#include <iostream>#include <cstring>#include <cstdio>#include <algorithm>#include <cstdlib>#include <cmath>#define eqs 1e-8using namespace std;double a = 2.0/3;double b = 1.0/3;int main(){    //freopen("data.txt","r",stdin);    double xax,xay;    double xbx,xby;    double xcx,xcy;    double xfx,xfy;    double xex,xey;    double xdx,xdy;    double xpx,xpy;    double xqx,xqy;    double xrx,xry;    int t;    scanf("%d",&t);    while(t--)    {        scanf("%lf %lf",&xax,&xay);        scanf("%lf %lf",&xbx,&xby);        scanf("%lf %lf",&xcx,&xcy);        xfx = a*xbx+b*xax; xfy = a*xby+b*xay;        xex = a*xax+b*xcx; xey = a*xay+b*xcy;        xdx = a*xcx+b*xbx; xdy = a*xcy+b*xby;        double linadk,linadb;        int sumad=0;        if(fabs(xax-xdx-0)<=eqs)        {            linadb = xax;            sumad = 0;        }else if(fabs(xay-xdy-0)<=eqs)        {            linadb = xay;            sumad = 1;        }else        {            sumad = 2;            linadk = (xay-xdy)/(xax-xdx);            linadb = xay - linadk * xax;        }        double linfck,linfcb;        int sumfc=0;        if(fabs(xfx-xcx-0)<=eqs)        {            linfcb = xfx;            sumfc = 0;        }else if(fabs(xfy-xcy-0)<=eqs)        {            linfcb = xay;            sumfc = 1;        }else        {            sumfc = 2;            linfck = (xfy-xcy)/(xfx-xcx);            linfcb = xfy - linfck * xfx;        }        double linbek,linbeb;        int sumbe=0;        if(fabs(xbx-xex-0)<=eqs)        {            linbeb = xbx;            sumbe = 0;        }else if(fabs(xby-xey-0)<=eqs)        {            linbeb = xby;            sumbe = 1;        }else        {            sumbe = 2;            linbek = (xby-xey)/(xbx-xex);            linbeb = xby - linbek * xbx;        }        if(sumfc==0)        {            xrx = linfcb;            if(sumad==1)            {                xry = linadb;            }else if(sumad==2)            {                xry = linadk*xrx+linadb;            }            xqx = linfcb;            if(sumbe==1)            {                xqy = linbeb;            }else if(sumbe==2)            {                xqy = linbek*xqx+linbeb;            }        }else if(sumfc==1)        {            xry = linfcb;            if(sumad==0)            {                xrx = linadb;            }else if(sumad==2)            {                xrx = (xry-linadb)/linadk;            }            xqy = linfcb;            if(sumbe==0)            {                xqx = linbeb;            }else if(sumbe==2)            {                xqx = (xqy-linbeb)/linbek;            }        }else        {            if(sumad==0)            {                xrx = linadb;                xry = xrx*linfck+linfcb;            }else if(sumad==1)            {                xry = linadb;                xrx = (xry-linfcb)/linfck;            }else if(sumad==2)            {                xrx = (linfcb-linadb)/(linadk-linfck);                xry = linfck * xrx + linfcb;            }            if(sumbe==0)            {                xqx = linbeb;                xqy = xqx*linfck+linfcb;            }else if(sumbe==1)            {                xqy = linbeb;                xqx = (xqy-linfcb)/linfck;            }else if(sumad==2)            {                xqx = (linfcb-linbeb)/(linbek-linfck);                xqy = linfck * xqx + linfcb;            }        }        if(sumbe==0)        {            xpx = linbeb;            if(sumad==1)            {                xpy = linadb;            }else if(sumad==2)            {                xpy = linadk*xpx+linadb;            }        }else if(sumbe==1)        {            xpy = linbeb;            if(sumad==0)            {                xpx = linadb;            }else if(sumad==2)            {                xpx = (xpy-linadb)/linadk;            }        }else if(sumbe==2)        {            if(sumad==0)            {                xpx = linadb;                xpy = xrx*linbek+linbeb;            }else if(sumad==1)            {                xpy = linadb;                xpx = (xry-linbeb)/linbek;            }else if(sumad==2)            {                xpx = (linbeb-linadb)/(linadk-linbek);                xpy = linbek * xpx + linbeb;            }        }        double ans = 0;        ans+=(xpx*xqy-xpy*xqx);        ans+=(xqx*xry-xqy*xrx);        ans+=(xrx*xpy-xry*xpx);        if(ans<0)        {            ans = ans * -1;        }        ans = ans/2;        printf("%.0lf\n",ans);    }    return 0;}


1 0
原创粉丝点击