题目大意是让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; }