1 条题解

  • 0
    @ 2025-5-6 20:33:56

    解题思路

    1. 结构体定义
      • 定义 point 结构体,包含 xy 坐标,用于表示点的位置。
    2. 求解函数 solve
      • 初始化 getxfalse,用于标记是否已经确定 x 坐标。
      • 计算线段 pp[0]pp[1] 的垂直平分线的参数 a1b1c1d1,以及线段 pp[0]pp[2] 的垂直平分线的参数 a2b2c2d2
      • 如果 abs(c1) < epseps 为一个极小值),则确定 x 坐标为 b1,并设置 getxtrue
      • 根据 getx 的值进行不同的计算:
        • 如果 getxtrue,则根据 a2c2b2d2 计算 y 坐标。
        • 如果 abs(c2) < eps,则确定 x 坐标为 b2,并根据 a1c1b1d1 计算 y 坐标。
        • 否则,对 a1c1a2c2 进行处理,计算出 x 坐标,再根据 d1a1b1 计算出 y 坐标。
      • 计算圆心 (x, y) 到点 pp[0] 的距离作为半径 r,以及计算圆的一般方程中的常数项 re
      • 按照格式输出圆的标准方程和一般方程。
    3. 主函数 main
      • 使用 while 循环持续读取输入的三个点的坐标,每次读取后调用 solve 函数计算并输出圆的方程。
    #include<iostream>
    #include<cmath>
    #include<iomanip>
    #define eps 1e-6
    using namespace std;
    
    struct point{
    	double x,y;
    }pp[3];
    
    void solve(){
    	bool getx = 0;
    	double x,y;
    	double a1 = pp[1].x-pp[0].x, b1 = (pp[0].x+pp[1].x)/2, c1 = pp[1].y-pp[0].y, d1 = (pp[0].y+pp[1].y)/2;
    	if(abs(c1)<eps)
    		x = b1, getx = 1;
    	double a2 = pp[2].x-pp[0].x, b2 = (pp[0].x+pp[2].x)/2, c2 = pp[2].y-pp[0].y, d2 = (pp[0].y+pp[2].y)/2;
    	if(getx)
    		y = -1*a2*(x-b2)/c2+d2;
    	else if(abs(c2)<eps){
    		x = b2;
    		y = -1*a1*(x-b1)/c1+d1;
    	}
    	else{
    		a1/=c1, a2/=c2;
    		x = (d1-d2+a1*b1-a2*b2)/(a1-a2);
    		y = d1 - a1*(x-b1);
    	}
    	double r = sqrt((pp[0].x-x)*(pp[0].x-x)+(pp[0].y-y)*(pp[0].y-y)), re = x*x+y*y-r*r;
    	cout << setiosflags(ios::fixed) << setprecision(3) << "(x " << (x>0?"- ":"+ ") << abs(x) << ")^2 + (y " << (y>0?"- ":"+ ")\
    	<< abs(y)<< ")^2 = " << r << "^2" << endl;
    	cout << "x^2 + y^2 " <<(x>0?"- ":"+ ") << 2*abs(x) << "x " << (y>0?"- ":"+ ") << 2*abs(y) << "y " <<(re>0?"+ ":"- ") << abs(re) << " = 0"<< endl;
    	cout << endl;
    }
    
    
    int main(){
    	while(cin>>pp[0].x>>pp[0].y>>pp[1].x>>pp[1].y>>pp[2].x>>pp[2].y)
    		solve();
    }
    
    • 1

    信息

    ID
    330
    时间
    1000ms
    内存
    256MiB
    难度
    10
    标签
    递交数
    1
    已通过
    1
    上传者