题目大意是让a,b,c三点,旋转后a落到b上,b落到c上,c无所谓。问存不存在这样一个旋转点。
其实任意一个三角形都有外接圆,所以经过一定的旋转,a一定可以到b,b也一定可以到c,但是如果要
同时发生的话就得旋转相同的角度使之发生,所以边ab == bc(等弦对等弧)。
需注意,在同一直线上的三点一定不可以。
判断是否在同一直线看斜率,然后算边长即可。
写这道题就想mark一下:1、判断斜率是否相等最好用乘法,可避免分母为0的特殊判断。
2、比较两边是否相等,用坐标算出边的平方即可,不用开根号,避免精度问题。
例如sqrt(1e18+1) 和sqrt(1e18),就会判相等。
附代码:
#include<bits/stdc++.h>
using namespace std;
#define mem(a,b) memset(a,b,sizeof(a))
typedef long long ll;
const int maxn = 2e5+5;
const double eps = 1e-11;
const int ff = 0x3f3f3f3f;
int main()
{
ll xa,xb,xc,ya,yb,yc;
cin>>xa>>ya>>xb>>yb>>xc>>yc;
double k1,k2;
if((yb-ya)*(xc-xa) == (yc-ya)*(xb-xa))
{
cout<<"No"<<endl;
return 0;
}
if((xb-xa)*(xb-xa)+(yb-ya)*(yb-ya) == (xb-xc)*(xb-xc)+(yb-yc)*(yb-yc))
cout<<"Yes"<<endl;
else
cout<<"No"<<endl;
return 0;
}