首页 > 编程知识 正文

已知两点求圆心坐标怎么求,已知两点坐标求以两点为直径的圆的方程

时间:2023-05-03 06:33:45 阅读:194940 作者:799

牛客题目链接

已知两点坐标可求出直线方程,当然也包括斜率了,已知斜率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 printfconst 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;}

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。