poj 2242(几何,中垂线,两条线相交,平行于x、y轴的特殊情况的求解)

复制代码
#include<iostream>
#include<cmath>
#define PI 3.141592653589793
using namespace std;
int main(){
    double x[3],y[3];
    double k[2][2],b[2][2],x0,y0,r;
    while(scanf("%lf%lf%lf%lf%lf%lf",&x[0],&y[0],&x[1],&y[1],&x[2],&y[2])==6){
        if(x[0]==x[1]){
            y0 = (y[0]+y[1])/2;
            //根据第二条线求
            if(y[0]==y[2]){
                x0 = (x[0]+x[2])/2;
            }
            else{
                k[1][0] = (y[0]-y[2])/(x[0]-x[2]);
                b[1][0] = y[0]-k[1][0]*x[0];
                k[1][1] = -1/k[1][0];
                b[1][1] = (y[0]+y[2])/2-k[1][1]*(x[0]+x[2])/2;
                x0 = (y0-b[1][1])/k[1][1];
            }
            goto l1;
        } 
        if(x[0]==x[2]){
            y0 = (y[0]+y[2])/2;
            //根据第一条线求
            if(y[0]==y[1]){
                x0 = (x[0]+x[1])/2;
            }
            else{
                k[0][0] = (y[0]-y[1])/(x[0]-x[1]);
                b[0][0] = y[0]-k[0][0]*x[0];
                k[0][1] = -1/k[0][0];
                b[0][1] = (y[0]+y[1])/2-k[0][1]*(x[0]+x[1])/2;
                x0 = (y0-b[0][1])/k[0][1];
            }
            goto l1; 
         }
         if(y[0]==y[1]){
             x0 = (x[0]+x[1])/2;
             //根据第二条线求
            k[1][0] = (y[0]-y[2])/(x[0]-x[2]);
            b[1][0] = y[0]-k[1][0]*x[0];
            k[1][1] = -1/k[1][0];
            b[1][1] = (y[0]+y[2])/2-k[1][1]*(x[0]+x[2])/2;
            y0 = k[1][1]*x0 + b[1][1];
            goto l1;
        }
        if(y[0]==y[2]){
            x0 = (x[0]+x[2])/2;
            //根据第一条线求 
            k[0][0] = (y[0]-y[1])/(x[0]-x[1]);
            b[0][0] = y[0]-k[0][0]*x[0];
            k[0][1] = -1/k[0][0];
            b[0][1] = (y[0]+y[1])/2-k[0][1]*(x[0]+x[1])/2;
            y0 = k[0][1]*x0+b[0][1]; 
            goto l1; 
        }
        k[0][0] = (y[0]-y[1])/(x[0]-x[1]);
        b[0][0] = y[0]-k[0][0]*x[0];
        k[0][1] = -1/k[0][0];
        b[0][1] = (y[0]+y[1])/2-k[0][1]*(x[0]+x[1])/2;
        
        k[1][0] = (y[0]-y[2])/(x[0]-x[2]);
        b[1][0] = y[0]-k[1][0]*x[0];
        k[1][1] = -1/k[1][0];
        b[1][1] = (y[0]+y[2])/2-k[1][1]*(x[0]+x[2])/2;
        
        x0 = -(b[1][1]-b[0][1])/(k[1][1]-k[0][1]);
        y0 = k[0][1]*x0+b[0][1];
        
l1:        r = sqrt((x0-x[0])*(x0-x[0])+(y0-y[0])*(y0-y[0]));
        printf("%.2lf\n",PI*r*2);
    }
    return 0;
}
复制代码

 

posted @   智人心  阅读(42)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
点击右上角即可分享
微信分享提示