2 线
题⽬描述
有一天rax看到了男神,有时可爱美丽的她派ypq去把yyqx抓回来给rax欣赏,但ypq和yyqx间隔了一条线,她必须跳到yyqx以前待得点的对称点才有可能抓到yyqx
给出⼀条直线,在这过程中yyqx可能移动位置,于是进行n 组询问,每组询问yyqx的坐标,求这个点关于这条直线的 对称点,输出ypq围堵的位置。
可爱帅气的ypq翻山越岭的为rax找yyqx,历尽千辛万苦,路上她还幸运的遇到了zx和sln两位帅气逼人的强盗,只劫财不劫色,可怜的ypq,灰头土脸,兜比脸还干净的,向前走,没留意到前方的大沟,然后哈哈哈哈,最后她回到了rax的身边(ps.当然还带上了yyqx啦),然后他们三个人幸福的生活的在一起了。(赤果果的甜蜜三角恋)
输⼊输出格式
输⼊格式 第⼀⾏四个数 x1 , y1 , x2 , y2 , 描述⼀条线。之后⼀⾏⼀个数字 n, 接下来 n ⾏每⾏ 两个整数 x, y 表⽰⼀个点坐标,保证点不在直线上。 输出格式 输出 n ⾏,分别为输⼊给出点的对称点的坐标,误差不超过1e-3即可。 输⼊输出样例
样例1
样例2
0 0 1 1
1
1 0
输出:0.000 1.000
line.in line.out
0 1 2 5
2
1 1
3 10
输出 -0.600 1.800
5.400 8.800
数据范围
对于0%的数据,和样例⼀模⼀样 对于10%的数据,直线和样例1或2⼀样 对于另外10%的数据,n = 1 对于100%的数据,n <=10^5,任何点不在直线上,坐标的范围是[-1000,1000]
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
int main()
{
/*freopen("line.in","r",stdin);
freopen("line.out","w",stdout);
*/
int ax,bx,cx,ay,by,cy,t,i;
double k,m,n,c,qx,qy;
scanf("%d %d %d %d",&ax,&ay,&bx,&by);
k = (double)(by - ay) / (bx - ax);
c = (double)by - k * bx;
m = (double)- / k;
scanf("%d",&t);
for(i = ;i <= t + ;i++)
{
scanf("%d %d",&cx,&cy);
n = (double)cy - m * cx;
qx = (double)(k * cx - cy + * c - n) / (m - k);
qy = (double)m * qx + n;
if(qx == -)
{
qx = ;
}
if(qy == -)
{
qy = ;
}
printf("%0.3lf %0.3lf\n",qx,qy);
} return ;
}
************
用解析几何,两点到直线的距离公式上方互为相反数导出来的。
哈哈哈
反击第一步