POJ 2624 简单计算几何

第一次用运算符重载,代码清晰多了。

已知两边,求组成平行四边形的第4点。运用向量相加性质。

有trick,公共点不一定是给出的第二点和第三点,自行判断。

/************************
 *Creater:Sevenster     *
 *Time:2012.08.01 12:05 *
 *PID:POJ 2624          *
 ************************/
#include <iostream>
using namespace std;

class CPoint
{
public:
      double x, y;
      CPoint( double a= 0, double b= 0 )
      {
              this->x=a;
              this->y=b;
      }
};

class CVector
{
public:
       double x, y;
       CVector( double a= 0, double b= 0 )
       {
                this->x=a;
                this->y=b;
       }
};

CVector operator-( CPoint b, CPoint a )
{
        return CVector( b.x- a.x, b.y- a.y );
}

CVector operator+( CVector a, CVector b )
{
        return CVector( a.x+ b.x, a.y+ b.y );
}

void putAns( CPoint p, CPoint o, CPoint q )
{
     CVector A,B,C;
     A= p- o;
     B= q- o;
     C= A+B;
     printf( "%.3lf %.3lf\n", o.x+ C.x, o.y+ C.y );
}

int main()
{
    CPoint p1,p2,p3,p4;
    while( scanf( "%lf %lf %lf %lf %lf %lf %lf %lf", &p1.x, &p1.y, &p2.x, &p2.y, &p3.x, &p3.y, &p4.x, &p4.y) != EOF )
    {
           if( p1.x== p3.x && p1.y== p3.y )
               putAns( p2,p1,p4 );
           else if( p1.x== p4.x && p1.y== p4.y )
               putAns( p2,p1,p3 );
           else if( p2.x== p3.x && p2.y== p3.y )
               putAns( p1,p2,p4 );
           else
               putAns( p1,p2,p3 );
    }
    return 0;
} 


你可能感兴趣的:(c,Class)