发布网友 发布时间: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
判断四个点是否重重,计算中点的位置,然后判断中点到四个点的距离是否相等