c语言 算平行四边形面积
答案:4 悬赏:80 手机版
解决时间 2021-03-14 09:37
- 提问者网友:蓝莓格格巫
- 2021-03-14 05:12
任意输入四个点到平面内(可重合),判断能否组成平行四边形,若能,输出其面积;若不能,输出不能组成平行四边形。
谢谢
最佳答案
- 五星知识达人网友:不甚了了
- 2021-03-14 06:15
4个点,组成四边形,那么就是有4条边,先判断两条边的斜率,如果相同,在判断剩下的两条边的斜率,如果再相同,那么就是平行四边形
4个点组成两对平行线,就是2中情况
一、1 2组成一条线,那么3 4组成一条线。剩下1 4和2 3组成两条线
二、1 3组成一条线,那么2 4组成一条线。剩下1 4和2 3组成两条线
分别判断情况
其实就是判断斜率问题,这里说一下,斜率判断不要用除法,而要用乘法
原因是除法小数近似时比较有误差,而乘法没有误差
做一个斜率比较的子函数
int fun1(int x1,int y1,int x2,int y2,int x3,int y3,int x4,int y4,int flag)
//这里要是vc的话,可以吧点的类传过去,flag是一个标记,标记那两条线比较
//最后返回一个数字标记那两条线的比价,不平行返回0
{
if((x1-x2)*(y3-y4)!=(x3-x4)*(y1-y2))
return 0;
return flag;
}
主函数中也比较简单的判断
int m[4],n[4],f;
int i;
//输入四个点到mn中
if(12 34点和14 23点的斜率判断)
求面积
else if(13 24点和14 23点的斜率判断)
求面积
else
不能
4个点组成两对平行线,就是2中情况
一、1 2组成一条线,那么3 4组成一条线。剩下1 4和2 3组成两条线
二、1 3组成一条线,那么2 4组成一条线。剩下1 4和2 3组成两条线
分别判断情况
其实就是判断斜率问题,这里说一下,斜率判断不要用除法,而要用乘法
原因是除法小数近似时比较有误差,而乘法没有误差
做一个斜率比较的子函数
int fun1(int x1,int y1,int x2,int y2,int x3,int y3,int x4,int y4,int flag)
//这里要是vc的话,可以吧点的类传过去,flag是一个标记,标记那两条线比较
//最后返回一个数字标记那两条线的比价,不平行返回0
{
if((x1-x2)*(y3-y4)!=(x3-x4)*(y1-y2))
return 0;
return flag;
}
主函数中也比较简单的判断
int m[4],n[4],f;
int i;
//输入四个点到mn中
if(12 34点和14 23点的斜率判断)
求面积
else if(13 24点和14 23点的斜率判断)
求面积
else
不能
全部回答
- 1楼网友:低血压的长颈鹿
- 2021-03-14 10:07
四边形的特征是对角线相交,任意两点可以组成一条直线,你先把20*20的矩阵枚举成数组,用概率论的思想应该很容易算出来了。
- 2楼网友:青尢
- 2021-03-14 08:27
楼上的方法不错,也可以利用两组对角相等,四个角总和为360度…至于角度的确定,可以利用余弦定理,根据点坐标,分别计算长度
- 3楼网友:从此江山别
- 2021-03-14 07:18
我只能判断能不能组成平行四边形,面积没做出来,希望对你有用:
#include
typedef struct node {
int x;
int y;
} Node;
int main(void)
{
Node n[4];
int i;
for (i = 0; i < 4; i++) {
printf("Enter the node %d->x\tnode %d->y:\n", i + 1, i + 1);
scanf("%d %d", &n[i].x, &n[i].y);
}
if (((n[3].x - n[2].x) == (n[1].x - n[0].x)) && ((n[3].y - n[2].y) == (n[1].y - n[0].y))) {
printf("mianji: %d\n", ((n[1].x - n[0].x) * n[2].y));
} else if (((n[3].x - n[1].x) == (n[2].x - n[0].x)) && ((n[3].y - n[1].y) == (n[2].y - n[0].y))) {
printf("mianji: %d\n", ((n[1].x - n[0].x) * n[2].y));
} else if (((n[3].x - n[0].x) == (n[1].x - n[2].x)) && ((n[3].y - n[0].y) == (n[1].y - n[2].y))) {
printf("mianji: ****\n");
} else {
printf("cannot\n");
}
return 0;
}
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯