zoukankan      html  css  js  c++  java
  • 判断线段是否在园内

    给出圆心坐标和半径 还有线段的两个端点 判断线段是全在圆内还是部分在圆内 或是 全在圆外

    #include<iostream>
    #include<stdio.h>
    #include<math.h>
    using namespace std;
    struct point{double x;double y;};
    
    double length(point a,point b)
    {
        return sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y));    
    
    }
    
    double dot(point a,point b)
    {
        return a.x*b.x+a.y*b.y;
    }
    
    double cross(point a,point b)
    {
        return a.x*b.y-a.y*b.x;
    }
    
    int dcmp(double x)
    {
        if(fabs(x)<0.000001)
            return 0;
        if(x<0)
            return -1;
        return 1;
    }
    
    
    
    double dis(point p,point a,point b)
    {
        
        point v1,v2,v3;
        v1.x=b.x-a.x; v1.y=b.y-a.y;
        v2.x=p.x-a.x; v2.y=p.y-a.y;
        v3.x=p.x-b.x; v3.y=p.y-b.y;
        if(dcmp(dot(v1,v2))<0)  return length(p,a);
        else if(dcmp(dot(v1,v3))>0) return length(p,b);
        return fabs(cross(v1,v2))/length(b,a);
    
    }
    
    
    int main()
    {
        int i,j,n,m,t;
        point c,a,b;
        double r,l1,l2,l3;
        scanf("%d",&n);
        while(n--)
        {
            scanf("%lf%lf%lf",&c.x,&c.y,&r);
            scanf("%lf%lf%lf%lf",&a.x,&a.y,&b.x,&b.y);
            l1=length(a,c);
            l2=length(b,c);
            l3=dis(c,a,b);
        //    printf("dis  %lf  %lf  %lf
    ",l1,l2,l3);
            if(l1<=r&&l2<=r)
                printf("ALL IN
    ");
        
                
            else if (l1>=r&&l2>=r&&l3>=r)
                printf("ALL OUT
    ");
            else
                printf("PART IN
    ");
        }
        return 0;
    }
  • 相关阅读:
    CA 证书和数字证书
    PHP获取不了内网IP?
    站点速度检测工具
    Mac地址
    交互机和路由器区别
    关于实体店收银系统和cookie实现登录状态
    Python3 的序列
    Python3 字符串格式化
    Python3 的元组
    Python3 的列表
  • 原文地址:https://www.cnblogs.com/assult/p/3341583.html
Copyright © 2011-2022 走看看