Time Limit: 1 second(s) | Memory Limit: 32 MB |
A parallelogram is a quadrilateral with two pairs of parallel sides. See the picture below:
Fig: a parallelogram
Now you are given the co ordinates of A, B and C, you have to find the coordinates of D and the area of the parallelogram. The orientation of ABCD should be same as in the picture.
Input
Input starts with an integer T (≤ 1000), denoting the number of test cases.
Each case starts with a line containing six integers Ax, Ay, Bx, By, Cx, Cy where (Ax, Ay) denotes the coordinate of A, (Bx, By) denotes the coordinate of B and (Cx, Cy) denotes the coordinate of C. Value of any coordinate lies in the range [-1000, 1000]. And you can assume that A, B and C will not be collinear.
Output
For each case, print the case number and three integers where the first two should be the coordinate of D and the third one should be the area of the parallelogram.
Sample Input | Output for Sample Input |
3 0 0 10 0 10 10 0 0 10 0 10 -20 -12 -10 21 21 1 40 | Case 1: 0 10 100 Case 2: 0 -20 200 Case 3: -32 9 1247 |
题意:
顺序给出三个点,让你求出一个点的坐标,使得四个点按顺序能组成平行四边形
输出这个点的坐标,以及平行四边形面积
题解:
不想用暴力枚举了,这样的题目用向量求解还是很方便的....
/*
http://blog.csdn.net/liuke19950717
*/
#include<cstdio>
#include<cmath>
using namespace std;
struct point
{
int x,y;
point friend operator + (point a,point b)
{
point tp={a.x+b.x,a.y+b.y};
return tp;
}
point friend operator - (point a,point b)
{
point tp={a.x-b.x,a.y-b.y};
return tp;
}
};
int area(point a,point b)
{
return abs(a.x*b.y-a.y*b.x);
}
int main()
{
int t;
scanf("%d",&t);
for(int k=1;k<=t;++k)
{
point p[4];
for(int i=0;i<3;++i)
{
scanf("%d%d",&p[i].x,&p[i].y);
}
p[3]=p[2]+p[0]-p[1];
int ans=area(p[0]-p[1],p[2]-p[1]);
printf("Case %d: %d %d %d\n",k,p[3].x,p[3].y,ans);
}
return 0;
}