第一次用运算符重载,代码清晰多了。
已知两边,求组成平行四边形的第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; }