Projection
For given three points p1,p2,p, find the projection point x of p onto p1p2.
Input
p1 p1 p2 p2 q p0 p0 p1 p1 ... pq−1 pq−1
In the first line, integer coordinates of p1 and p2 are given. Then, q queries are given for integer coordinates of p.
Output
For each query, print the coordinate of the projection point x. The output values should be in a decimal fraction with an error less than 0.00000001.
Constraints
- 1≤q≤1000
- −10000≤xi,yi≤10000
- p1 and p2 are not identical.
Sample Input 1
0 0 2 0 3 -1 1 0 1 1 1
Sample Output 1
-1.0000000000 0.0000000000 0.0000000000 0.0000000000 1.0000000000 0.0000000000
Sample Input 2
0 0 3 4 1 2 5
Sample Output 2
3.1200000000 4.1600000000
题目连接:http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=CGL_1_A
#include<string.h>
#include<algorithm>
#include<stdio.h>
#include<complex>
using namespace std;
typedef complex<double> qua;
qua solve(qua a,qua b,qua c)
{
b-=a,c-=a;
return a+b*real(c/b);
}
int main()
{
int m;
double x1,y1,x2,y2,x3,y3;
scanf("%lf%lf%lf%lf%d",&x1,&y1,&x2,&y2,&m);
while(m--)
{
scanf("%lf%lf",&x3,&y3);
qua ans=solve(qua(x1,y1),qua(x2,y2),qua(x3,y3));
printf("%.8f %.8f\n",ans.real(),ans.imag());
}
}