UVa 11437 - Triangle Fun

了解矢量为交点的坐标。

#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
#include <cstdlib>
#include <cmath>
#define eqs 1e-8
using 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;
}


版权声明:本文博客原创文章,博客,未经同意,不得转载。

你可能感兴趣的:(RIA)