C语言怎么判断4个坐标坐标是否构成矩形?

发布网友 发布时间:2022-04-25 04:59

我来回答

5个回答

热心网友 时间:2023-10-27 20:22

代码:

#include <stdio.h>


typedef struct {

        double x;

        double y;

}point;



int is_rectangle(point a,point b,point c,point d){

        int ab_y = a.y - b.y;

        int ab_x = a.x - b.x;

        int cd_y = c.y - d.y;

        int cd_x = c.x - d.x;

        // 首先判断ab是否平行于cd

        if (ab_x == 0 || cd_x == 0){

                if(ab_x != cd_x){

                        return 0;

                }

        }else{

                if(ab_y/ab_x != cd_y/cd_x){

                        return 0;

                }

        }



        // 再判断ab是否等于cd

        if(ab_y*ab_y + ab_x*ab_x != cd_y*cd_y + cd_x*cd_x){

                return 0;

        }


        // 然后判断ab是否垂直于ac

        int ac_y = a.y - c.y;

        int ac_x = a.x - c.x;

        if(ab_x == 0 ){

                if(ac_y != 0)

                        return 0;

        }else if(ac_x == 0){

                if(ab_y != 0)

                        return 0;

        }else if((ac_y/ac_x)*(ab_y/ab_x) != -1){

                return 0;

        }

        return 1;

}


int main(){

        printf("输入4个坐标值:\n");

        point a,b,c,d;

        scanf("%lf %lf",&a.x,&a.y);

        scanf("%lf %lf",&b.x,&b.y);

        scanf("%lf %lf",&c.x,&c.y);

        scanf("%lf %lf",&d.x,&d.y);

        if(is_rectangle(a,b,c,d)){

                printf("能构成矩形\n");

        }else{

                printf("无法构成矩形\n");

        }

        return 0;

}

运行结果:

                              

热心网友 时间:2023-10-27 20:23

你好,步骤如下:

计算4个点的重心,然后依次对4个坐标排序,排序方式最简单的就是按每个点与重心的向量角进行点排序。

排序好后依次计算每相邻三个点构成的两条直线是否垂直,也是求向量夹角。

4个夹角都在90±5°内就是矩形了,精度你可以自己把握。

热心网友 时间:2023-10-27 20:23

找到4个向量,两两互相垂直,用向量点积判断。
也可以用两组互相平行,向量成比例,加上一组互相垂直。

热心网友 时间:2023-10-27 20:24

设四个点d1(x1, y1), d2(x2, y2), d3(x3, y3), d4(x4, y4)
然后利用勾股定理:
if((x1-x4)^2+(y1-y4)^2+(x2-x1)^2+(y2-y1)^2 ==
(x3-x2)^2+(y3-y2)^2+(x3-x4)^2+(y3-y4)^2)
printf("是矩形\n");

热心网友 时间:2023-10-27 20:24

判断四个点是否重重,计算中点的位置,然后判断中点到四个点的距离是否相等

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com