已知圆上两点坐标和半径求圆心
生活随笔
收集整理的這篇文章主要介紹了
已知圆上两点坐标和半径求圆心
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
牛客題目鏈接
已知兩點坐標可求出直線方程,當然也包括斜率了,已知斜率tan a,最近剛學的高數上,可根據三角函數的反函數(C++ atan2(y,x))求出角度(小心為double類型),用到圓心到兩點中點這條邊可求出圓心。
/**遇到此類型的題目就是先確定圓心再去判斷其他店是否在圓上或者圓內**/#include <map> #include <queue> #include <string> #include<iostream> #include<stdio.h> #include<string.h> #include <algorithm> #include <math.h> typedef long long ll; typedef unsigned long long ull; using namespace std; typedef pair<ll,ll> pii; const int maxn=2e5+1010; #define inf 0x3f3f3f3f #define sf scanf #define pf printf const int mod=998244353; const int MOD=10007; const double eps=1e-6;ll r,num;struct Point {double x,y;Point(){}Point(double tx,double ty){x=tx;y=ty;} }p[200];double dist(Point p1,Point p2) {return sqrt(pow(p1.x-p2.x,2)+pow(p1.y-p2.y,2));///求出兩點距離 }Point Center(Point p1,Point p2) {Point mid = Point((p1.x+p2.x)/2,(p1.y+p2.y)/2);///求得中點坐標double angle = atan2(p1.x-p2.x,p2.y-p1.y); ///求出極坐標double d = sqrt(r*r-pow(dist(p1,mid),2));///求出側邊也就是圓心到其中點的距離return Point(mid.x-d*cos(angle),mid.y-d*sin(angle));///求出圓心坐標 }int main() {cin>>r;cin>>num;for(int i=0;i<num;i++)cin>>p[i].x>>p[i].y;ll ans = 1;for(int i=0;i<num;i++){for(int j=i+1;j<num;j++){if(dist(p[i],p[j]) > 2.0*r) continue;///兩點距離比直徑大直接退出Point center = Center(p[i],p[j]);///求出圓心的ll cnt = 0;for(int k=0;k<num;k++)if(dist(center,p[k]) < 1.0*r+eps) cnt++;///求這個求出來的圓心點到個點的距離是否瞞住條件ans = max(ans,cnt);///求出最大值}}cout<<ans<<endl;return 0; }總結
以上是生活随笔為你收集整理的已知圆上两点坐标和半径求圆心的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql中%3c%3e和=_Grafa
- 下一篇: 李雅普诺夫稳定性