栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C语言判断一点是否在一任意四边形中

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C语言判断一点是否在一任意四边形中

代码如下

因为可能既可能为凸四边形也可能为凹四边形,所以不用叉乘,而是用海伦公式计算面积暴力解法,此题还可以定义函数或者define。

#include
#include
int main()
{
    double x1,y1,x2,y2,x3,y3,x4,y4,x,y;
    int n,t,i=0;
    int m[20000];
    scanf("%lf %lf %lf %lf %lf %lf %lf %lf",&x1,&y1,&x2,&y2,&x3,&y3,&x4,&y4);
    getchar();
    scanf("%d",&n);
    getchar();
    t=n;

    double a,b,c,d,e,p1,p2,p3,p4,p5,p6,s1,s2,s3,s4,s5,s;
    double a1,b1,c1,d1;
    a=sqrt((x1-x2)*(x1-x2)+pow(y1-y2,2));
    b=sqrt((x2-x3)*(x2-x3)+pow(y2-y3,2));
    c=sqrt((x3-x4)*(x3-x4)+pow(y3-y4,2));
    d=sqrt((x1-x4)*(x1-x4)+pow(y1-y4,2));
    e=sqrt(pow(x1-x3,2)+pow(y1-y3,2));
    
    p1=(a+b+e)*1.0/2;
    p2=(c+d+e)*1.0/2;
    
    s1=sqrt(p1*(p1-a)*(p1-b)*(p1-e))+sqrt(p2*(p2-c)*(p2-d)*(p2-e));
    while(t>0)
    {
        scanf("%lf%lf",&x,&y);
        a1=sqrt(pow(x-x1,2)+pow(y-y1,2));
        b1=sqrt(pow(x-x2,2)+pow(y-y2,2));
        c1=sqrt(pow(x-x3,2)+pow(y-y3,2));
        d1=sqrt(pow(x-x4,2)+pow(y-y4,2));
        p3=(a+a1+b1)*1.0/2;
        p4=(b+c1+b1)*1.0/2;
        p5=(c+d1+c1)*1.0/2;
        p6=(d+a1+d1)*1.0/2;
      
        s2=sqrt(p3*(p3-a)*(p3-a1)*(p3-b1));
        s3=sqrt(p4*(p4-b)*(p4-c1)*(p4-b1));
        s4=sqrt(p5*(p5-c)*(p5-d1)*(p5-c1));
        s5=sqrt(p6*(p6-d)*(p6-a1)*(p6-d1));
        s=s2+s3+s4+s5;
        if(s==s1||s2==0||s3==0||s4==0||s5==0)
        m[i]=1;
        else
        m[i]=0;
        i++;
        t--;
    }
    for(i=0;i     {
        if(m[i]==1)
        printf("YESn");
        else
        printf("NOn");
    }
    return 0;
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/302385.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号